Как хранить и проверять пароль
Короткий ответ
При регистрации сохраните в базе хеш, а не сам пароль:
<?php
$hash = password_hash('secret-password', PASSWORD_DEFAULT);
echo strlen($hash) >= 60 ? 'hash created' : 'error';Результат:
hash createdПроверка при входе
password_verify() сравнивает введённый пароль с хешем из базы:
<?php
$hash = password_hash('secret-password', PASSWORD_DEFAULT);
var_dump(password_verify('secret-password', $hash));
var_dump(password_verify('wrong', $hash));Результат:
bool(true)
bool(false)Обновление хеша
Со временем алгоритм по умолчанию меняется. После успешного входа проверьте, не пора ли пересчитать хеш:
<?php
$hash = password_hash('secret-password', PASSWORD_DEFAULT);
var_dump(password_needs_rehash($hash, PASSWORD_DEFAULT));Результат:
bool(false)Функции из этого ответа
- password_hash — Создаёт хеш пароля для хранения в базе.
- password_verify — Проверяет, соответствует ли пароль хешу.
- random_bytes — Возвращает случайные байты, пригодные для защиты.