Хранение паролей в Yii2
Здравствуйте! Сегодня хотелось бы поговорить о методах, позволяющих повысить безопасность, в приложениях на Yii2.
Поскольку алгоритмы шифрования паролей алгоритмами md5 or sha1 уже не внушают сильного доверия. В Yii2 был реализован метод реализующий хеширование bcrypt.
$hash_pass=Yii::$app->getSecurity()->generatePasswordHash('123');
в результате выполнения данного метода переменная $hash_pass будет содержать приблизительно следующее значение из 64 символов
$2y$13$imm.m0q9qN/IrWF4AtmH4ejHyS3d.ElmkayY3vQ69DTApgEY4ne36
Также у generatePasswordHash можно указать вторым параметром сложность шифрования
$hash_pass=Yii::$app->getSecurity()->generatePasswordHash('123',10);
по умолчанию этот параметр имеет значение 13. В официальной документации рекомендуют выставлять этот параметр повыше, но не стоит увлекаться.
Это довольно ресурсоемкий процесс. Если представить, что ваш компьютер сосчитает хеш со сложностью 14 за 1 секунду, то формула по нахождению времени расчета хеша будет выглядеть так 2^(сложность — 14) секунд.
В отличии от md5, при повторном вызове данного метода, будет сгенерирован абсолютно другой набор символов! Для этого для валидации пароля используется следующий код.
Yii::$app->getSecurity()->validatePassword($pass, $hash_pass);
Метод вернет true в случае успешной проверки и false в случае несоответствия данных.