Хеширование паролей



Задача:

Безопасно сохранить пользовательский пароль в базе данных, чтобы защитить его от утечек



Решение:

Используйте встроенные функции 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);

}






Рекомендации:



🔹Не храните пароли в открытом виде!

🔹Используйте длину паролей не менее 12 символов и требуйте от пользователей включать буквы, цифры и специальные символы.

🔹Регулярно проверяйте алгоритм хеширования и обновляйте устаревшие хеши.





Пример работы с базой данных:



// Сохранение хеша

$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 'Неверный пароль!';

}




👉 @PHPgx | #заметки