Хеширование паролей
➖ Задача:
Безопасно сохранить пользовательский пароль в базе данных, чтобы защитить его от утечек
➖ Решение:
Используйте встроенные функции
Пример:
🔹
🔹
➖ Проверка хеша:
С помощью функции
➖ Рекомендации:
🔹 Не храните пароли в открытом виде!
🔹 Используйте длину паролей не менее 12 символов и требуйте от пользователей включать буквы, цифры и специальные символы.
🔹 Регулярно проверяйте алгоритм хеширования и обновляйте устаревшие хеши.
➖ Пример работы с базой данных:
👉 @PHPgx | #заметки
Безопасно сохранить пользовательский пароль в базе данных, чтобы защитить его от утечек
Используйте встроенные функции
password_hash()
и password_verify()
.Пример:
// Создание хеша пароля
$password = 'secure_password';
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
// Проверка пароля
if (password_verify('secure_password', $hashedPassword)) {
echo 'Пароль верный!';
} else {
echo 'Неверный пароль!';
}
password_hash()
автоматически выбирает безопасный алгоритм хеширования, например, bcrypt
, и добавляет "соль".password_verify()
сравнивает пользовательский ввод с хешем из базы.С помощью функции
password_needs_rehash()
можно обновить хеш пароля, если алгоритм был улучшен:if (password_needs_rehash($hashedPassword, PASSWORD_DEFAULT)) {
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
}
// Сохранение хеша
$stmt = $pdo->prepare("INSERT INTO users (username, password) VALUES (:username, :password)");
$stmt->execute([
'username' => 'user1',
'password' => $hashedPassword,
]);
// Проверка пароля при авторизации
$stmt = $pdo->prepare("SELECT password FROM users WHERE username = :username");
$stmt->execute(['username' => 'user1']);
$storedHash = $stmt->fetchColumn();
if (password_verify('secure_password', $storedHash)) {
echo 'Доступ разрешён!';
} else {
echo 'Неверный пароль!';
}