Шифрование хранилища базы данных

SSL/SSH защищает данные, которыми обмениваются клиент и сервер, но не защищает сами данные, хранимые в базе данных. SSL - протокол шифрования на уровне сеанса передачи данных.

В случае, если взломщик получил непосредственный доступ к БД (в обход веб-сервера), он может извлечь интересующие данные или нарушить их целостность, если информация не защищена на уровне самой БД. Шифрование данных - хороший способ предотвратить такую ситуацию, но лишь незначительное количество БД предоставляют такую возможность.

Наиболее простое решение этой проблемы - установить вначале обыкновенный программный пакет для шифрования данных, а затем использовать его в ваших PHP-скриптах. PHP может вам помочь с этой задачей с помощью таких расширений как Mcrypt и Mhash, реализующих довольно большое число алгоритмов шифрования. При таком подходе скрипт вначале шифрует сохраняемые данные, а затем дешифрует их при запросе. Ниже приведены примеры того, как работает шифрование данных в PHP-скриптах.

В случае работы со скрытыми служебными данными, если не требуется их нешифрованное представление (т.е. его не нужно показывать), то, как следствие, можно использовать хэширование. Хорошо известный пример хэширования - хранение криптографического хэша от пароля в БД, вместо хранения оригинального значения. Смотрите также документацию по функции crypt().

Пример #1 Использование хешированных паролей

<?php

// сохранение хэшированного пароля
$query  sprintf("INSERT INTO users(name,pwd) VALUES('%s','%s');",
            
pg_escape_string($username), crypt($password'$2a$07$usesomesillystringforsalt$'));
$result pg_query($connection$query);

// проверка введенного пользователем пароля на корректность
$query sprintf("SELECT 1 FROM users WHERE name='%s' AND pwd='%s';",
            
pg_escape_string($username), crypt($password'$2a$07$usesomesillystringforsalt$'));
$result pg_query($connection$query);

if (
pg_num_rows($result) > 0) {
    echo 
'Добро пожаловать, $username!';
} else {
    echo 
'Авторизация не удалась, $username.';
}

?>

Участник рейтинга Тэглайн 2010