создание и продвижение сайта (вбиваю в ТОП-10, как гвозди)Настройка и сопровождение платной рекламы яндекс.директ

PHP. Руководство по PHP. 2005

Защита хранилища базы данныхПред.Глава 27. Безопасность баз данныхСлед.

Защита хранилища базы данных

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

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

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

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

Пример 27-1. Использование хешированных паролей
<?php

// сохранение хешированного пароля

$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 "Welcome, $username!";

}

else {

    echo "Authentication failed for $username.";

}

?>

Отвечу на любые вопросы. С уважением, Дмитрий Владимирович.

Ваше письмо×
Free Web Hosting