Хеширование паролей — критически важная часть безопасности любого приложения. Вот современные и безопасные подходы.
Хеширование:
$password = 'user_password_123';
$hash = password_hash($password, PASSWORD_DEFAULT);
// $hash выглядит как: $2y$10$X5z4WLP3XsAeHd8qjXtC.OqQlYHu6.MhMIt7eMhOqRtJWABt3NQYm
Проверка:
if (password_verify($password, $hash)) {
// Пароль верный
} else {
// Пароль неверный
}
$options = [
'cost' => 12, // Время вычисления (чем больше - тем безопаснее)
// PHP автоматически выберет лучший алгоритм (bcrypt, argon2)
];
$hash = password_hash($password, PASSWORD_DEFAULT, $options);
❌ md5() — взламывается мгновенно
❌ sha1() — небезопасно для паролей
❌ crypt() без правильных параметров
❌ самодельные решения
// При успешной проверке пароля
if (password_needs_rehash($hash, PASSWORD_DEFAULT)) {
$newHash = password_hash($password, PASSWORD_DEFAULT);
// Сохраните $newHash в БД
}
Добавьте секрет в конфиг:
define('PEPPER', 'your-long-secret-pepper-string');
Модифицируйте хеширование:
$pepperedPassword = hash_hmac('sha256', $password, PEPPER);
$hash = password_hash($pepperedPassword, PASSWORD_DEFAULT);
Регистрация:
function registerUser($username, $password) {
$hash = password_hash($password, PASSWORD_DEFAULT);
// Сохраняем $username и $hash в БД
}
Авторизация:
function loginUser($username, $password) {
// Получаем $hash из БД по $username
if (password_verify($password, $hash)) {
if (password_needs_rehash($hash, PASSWORD_DEFAULT)) {
$newHash = password_hash($password, PASSWORD_DEFAULT);
// Обновляем хеш в БД
}
return true; // Успешный вход
}
return false;
}
всегда используйте password_hash()
с PASSWORD_DEFAULT
для хеширования и password_verify()
для проверки. Регулярно обновляйте алгоритмы и параметры хеширования. Добавление pepper обеспечит дополнительную защиту при компрометации БД.