Хеширование паролей является одной из важнейших частей хорошей системы безопасности. В Symfony 4.3 добавили кодировщик паролей Sodium для хеширования (или «кодирования», как Symfony называет это по историческим причинам) паролей с использованием библиотеки libsodium
.
Однако, учитывая быстро развивающуюся природу хэшей, все меньше и меньше рекомендуется выбирать конкретный алгоритм хэширования. Даже функция PHP password_hash()
определяет специальное значение PASSWORD_DEFAULT
для автоматического выбора наилучшего из доступных алгоритмов хеширования (в текущих версиях PHP это все еще Bcrypt, но в будущем он изменится).
Вот почему в Symfony 4.3 сделали еще несколько изменений, связанных с кодировщиками паролей. Во-первых, новая рекомендация для хеширования пользовательских паролей – полагаться на значение 'auto'
:
# config/packages/security.yaml
security:
# ...
encoders:
App\Entity\User:
- algorithm: 'bcrypt'
- algorithm: 'argon2i'
- algorithm: 'sodium'
+ algorithm: 'auto'
Это значение автоматически выбирает наилучший из возможных алгоритмов хеширования, поэтому оно не относится к конкретному алгоритму и изменится в будущем. Текущая реализация использует 'sodium'
, если это возможно, в противном случае он возвращается к 'native'
.
Параметр 'native'
конфигурации связан с классом NativePasswordEncoder
, который является другим основным изменением хэшей паролей в Symfony 4.3. Этот новый кодировщик использует как Symfony, так и PHP для выбора наилучшего алгоритма.
Текущая реализация NativePasswordEncoder
пытается использовать любой из вариантов Argon2
(Argon2i
или Argon2id
), прежде чем вернуться к Bcrypt
. Однако, если в будущем константа PHP PASSWORD_DEFAULT
изменится, будет выбран этот новый алгоритм (если PHP определяет его как более сильный, чем Argon2
).