Автоматическое перехэширование паролей в Laravel 11
Следующей в нашей серии статей о функциях безопасности Laravel 11 будет довольно знакомая: "Автоматическое перехэширование паролей".
Согласно примечаниям к выпуску:
По умолчанию в Laravel используется алгоритм хеширования паролей bcrypt. "Рабочий фактор" для хэшей bcrypt можно настроить с помощью конфигурационного файла
config/hashing.php
или переменной средыBCRYPT_ROUNDS
.Как правило, коэффициент работы bcrypt следует увеличивать со временем, по мере роста вычислительной мощности CPU / GPU. Если вы увеличите коэффициент рабочего фактора bcrypt для вашего приложения, Laravel станет изящно и автоматически пересчитывать пароли пользователей при их аутентификации в вашем приложении.
Мы уже несколько раз затрагивали эту тему, поэтому, чтобы не повторяться, рассмотрим связанные с ней параметры конфигурации.
Отключение автоматического перехэширования
Если необходимо отключить функцию автоматического перехэширования паролей, можно установить флаг rehash_on_login
в файле config/hashing.php
.
// config/hashing.php
'rehash_on_login' => false,
Это может пригодиться, если вы реализовали собственную систему аутентификации или обработку паролей, когда пароли не нужно перехэшировать или поля не так просто автоматически определить средствами Laravel.
Настраиваемые поля паролей
Если приложение хранит пароли в поле базы данных, отличном от password
, можно указать Laravel имя поля пароля с помощью метода getAuthPasswordName()
в модели User
(расширяющего трейт Authenticatable
).
class User extends Authenticatable
{
// ...
public function getAuthPasswordName()
{
return 'user_password';
}
}
Laravel использует этот метод, определяющий существующий хэш пароля, проверяющий, нужно ли его перехэшировать, и если да, то сохраняющий перехэшированный пароль.
Увеличение числа раундов bcrypt
Вы можете переопределить коэффициент раундов/рабочих факторов bcrypt, используемых при хешировании паролей, установив BCRYPT_ROUNDS
или опубликовав и отредактировав config/hashing.php
. По умолчанию в Laravel 11 установлено значение 12, что вполне подходит для большинства приложений, но его можно увеличить, если безопасность паролей вас сильно беспокоит.
// .env
BCRYPT_ROUNDS=12
// config/hashing.php
'bcrypt' => [
'rounds' => env('BCRYPT_ROUNDS', 12),
'verify' => env('HASH_VERIFY', true),
],
- Security Tip: Increase Your bcrypt Rounds
- Authenticatable Contract
- PHP 8.4: Стоимость Bcrypt по умолчанию изменена с 10 на 12