Encoder de Senha Nativo no Symfony 4.3
Hash de senhas é uma das partes mais críticas de um bom sistema de segurança. No Symfony 4.3, foi adicionado um encoder de senha Sodium para realizar o hash de senhas (ou como o Symfony chama: “encode”, por razões históricas) usando a biblioteca libsodium.
No entanto, devido a natureza evolutiva acelerada dos hashers, é cada vez menos recomendado selecionar um algoritmo de hash específico. Mesmo a função password_hash() do PHP define um valor especial PASSWORD_DEFAULT
para auto-selecionar o melhor algoritmo de hash disponível (nas versões atuais do PHP ainda é Bcrypt, mas irá mudar no futuro).
É por isso que no Symfony 4.3 foram realizadas mais algumas mudanças relacionadas aos encoders de senhas. Primeiro, a nova recomendação para hash de senhas de usuários é contar com o valor 'auto'
:
# config/packages/security.yaml
security:
# ...
encoders:
App\Entity\User:
- algorithm: 'bcrypt'
- algorithm: 'argon2i'
- algorithm: 'sodium'
+ algorithm: 'auto'
Esse valor seleciona automaticamente o melhor algoritmo de hash, portanto, não refere-se a um algoritmo específico e será alterado no futuro. A implementação atual usa 'sodium'
se possível e, caso contrário, volta para 'native'
.
A opção de configuração 'native'
está associada à classe NativePasswordEncoder
, que é a outra mudança principal referente aos hashers de senha no Symfony 4.3. Este novo encoder depende tanto do Symfony quanto do PHP para selecionar o melhor algoritmo possível.
A implementação atual do NativePasswordEncoder
tenta usar qualquer uma das variantes do Argon2 (Argon2i ou Argon2id) antes de retornar ao Bcrypt. No entanto, se a constante do PHPPASSWORD_DEFAULT
mudar no futuro, aquele novo algoritmo será selecionado (se o PHP o definir como mais forte que Argon2).
Tradução de: New in Symfony 4.3: Native password encoder