PHP Conference Nagoya 2025

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

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

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

Простейший способ защитить информацию — вначале установить пакет для шифрования данных, а затем использовать этот пакет в PHP-скриптах. PHP помогает в этом и предлагает модули вроде OpenSSL и Sodium, которые покрывают широкий круг алгоритмов шифрования. Скрипт шифрует данные перед вставкой в базу данных и расшифровывает данные при извлечении. В следующих параграфах документация приводит примеры шифрования.

Хеширование

При работе со скрытыми данными, которые требуют повышенного внимания, данные хешируют, если не требуется необработанное представление данных, — то, которое не требуется показывать. Популярный пример данных, которые требуют хеширования, — хранение криптографического хеша пароля в БД вместо хранения самого пароля.

Функции, которые работают с паролями, помогают удобно хешировать конфиденциальные данные и работать с этими хешами.

Функция password_hash() хеширует заданную строку самым стойким из доступных алгоритмом, а функция password_verify() проверяет, совпадает ли заданный пароль с хешем, который хранится в базе данных.

Пример #1 Хеширование полей с паролями

<?php

// Сохраняем хеш пароля
$query = sprintf("INSERT INTO users(name,pwd) VALUES('%s','%s');",
pg_escape_string($username),
password_hash($password, PASSWORD_DEFAULT));
$result = pg_query($connection, $query);

// Проверяем правильность пароля, который ввёл пользователь
$query = sprintf("SELECT pwd FROM users WHERE name='%s';",
pg_escape_string($username));
$row = pg_fetch_assoc(pg_query($connection, $query));

if (
$row && password_verify($password, $row['pwd'])) {
echo
'Добро пожаловать, ' . htmlspecialchars($username) . '!';
} else {
echo
'Ошибка авторизации, ' . htmlspecialchars($username) . '.';
}

?>
Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top