Работа с паролями

Многие разработчики знают, что хранить пароль открытым текстом нельзя, но многие до сих пор считают безопасным использование для хеширования паролей md5 или sha1. Раньше упомянутых алгоритмов было достаточно, но современное оборудование позволяет подобрать эти хеши очень быстро, методом простого перебора.

Для того, чтобы обеспечить повышенную безопасность паролей ваших пользователей даже в худшем случае (ваше приложение взломано), нужно использовать алгоритм шифрования, устойчивый к атаке перебором. Лучший вариант в текущий момент bcrypt. В PHP вы можете использовать хеши bcrypt через функцию crypt. Yii обеспечивает две вспомогательные функции, которые упрощают использование функции crypt для генерации и проверки пароля.

Когда пользователь задаёт пароль (например во время регистрации), пароль должен быть захеширован:

$hash = Yii::$app->getSecurity()->generatePasswordHash($password);

Хеш можно связать с соответствующим атрибутом модели, так чтобы он сохранялся в базе для последующего использования.

Когда пользователь попытается войти, отправленный пароль должен быть хеширован и сравнён с ранее сохранённым хешем:

if (Yii::$app->getSecurity()->validatePassword($password, $hash)) {
    // всё хорошо, пользователь может войти
} else {
    // неправильный пароль
}