Можно устанавливать подключения с помощью SSL для шифрования соединений клиент-сервер, что дает повышенную безопасность. А можно использовать ssh для шифрования сетевых соединений между клиентами и сервером баз данных. Любой из этих способов сильно усложняет отслеживание и получение информации из сетевого траффика.
Хранение зашифрованных данных
SSL/SSH защищает данные только по пути от клиента к серверу, но не данные, хранимые в базе данных. SSL — лишь сетевой протокол.
Когда злоумышленник получает доступ к вашей базе данных в обход Web-сервера, хранимые важные данные могут быть получены и использованы, за исключением случая, когда информация защищена в самой базе данных. Шифрование — весьма хороший прием в этом случае, но такой способ поддерживают ныне лишь очень немногие системы управления базами данных.
Самый легкий путь в этом случае — создать свою собственную систему шифрования, а затем использовать ее в скриптах на PHP. PHP способствует такому подходу благодаря наличию специфичных раширений, таких, как Mcrypt и Mhash, охватывающих большой ряд алгоритмов шифрования. Программа шифрует сохраняемые данные и расшифровывает получаемые. Для детального описания схем шифрования смотрите ссылки [3].
В случае скрытых данных, где не требуется их исходный вид (к примеру, для отображения), можно использовать хеширование. Известным примером хеширования является сохранение в базе данных хеша MD5 от пароля вместо самого пароля. Для подробного описания смотрите crypt () и md5().
Пример: Использование хешированных паролей.
// сохраняем хеш от пароля.
$query = sprintf («INSERT INTO users (name, pwd) VALUES ('%s','%s');» ,.
addslashes ($username), md5($password));
$result = pg_exec ($connection, $query);
// проверяем корректность введенного пользователем пароля.
$query = sprintf («SELECT 1 FROM users WHERE name='%s' AND pwd='%s';» ,.
addslashes ($username), md5($password));
$result = pg_exec ($connection, $query);
if (pg_numrows ($result) > 0) {.
echo «Добро пожаловать, $username!» ;
}.
else {.
echo «Введен неверный пароль для $username.» ;
}.