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

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

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

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

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

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

if (Yii::$app->getSecurity()->validatePassword($password, $hash)) {
    // all good, logging user in
} else {
    // wrong password
}