Como armazenar as senhas corretamente com PHP

Garantir que as senhas dos usuários estão armazenadas corretamente no banco de dados da um certo trabalho, mas assim, ainda não é ciência de foguete, para você usar md5 porque é fácil. Vale lembrar que o md5 não serve para nada e bem no nível do NADA MESMO.

Muitas vezes, a validação de login fica como responsabilidade do banco de dados (Oi? Claro que não, ta louco!).

Quem não fez algo assim (favor ignorar o sql injection):

$sql = “SELECT id FROM user WHERE email=’$email’ AND password=MD5(‘$password’)”;

Você não valida depois se veio uma linha? Então, quem validou foi o banco…

Sendo desse jeito, não temos muito o que fazer. A primeira coisa que precisa ocorrer é alterar quem valida a senha do usuário e isso quem deve fazer é a aplicação.

Nesse contexto, vamos usar as funções de senhas do PHP.

password_hash

password_verify

Conforme manual, password_hash, vai gerar uma senha bem diferente do md5 e se fizer certinho não mexe mais (spoiler, explico no final).

Simples nesse nível:

Agora, o que é o que.

PASSWORD_DEFAULT

É uma constante do PHP que justamente gerencia qual será o algoritimo de criptografia. Ela será alterada caso em uma nova versão do PHP tenha uma forma melhor de criptografia.

cost

É o “custo” daquele hash, quanto maior o custo maior é o tempo para gerar uma senha (explicação prática do cost aqui). Por padrão o cost é 10, logo se eu não passase ele daria na mesma.

Blz, já salvei a senha do meu usuário e tudo mais, agora como eu valido isso?

Pois é, “tudo” isso.

Como bônus, agora vem a parte do corretamente.

O “password_needs_rehash” verifica se o hash usado como senha ainda é o melhor que há disponível.

Pense assim, hoje você esta usando o “cost” 10, mas amanhã vai começar a usar o 11, ou 12, ou o “PASSWORD_DEFAULT” mudou, quando que você vai alterar o hash da senha do usuário? Dessa forma, você já aproveita que você tem a senha do usuário e criptografa ela no novo padrão de hash.

Dessa forma, quando mudar o padrão de criptografia, ou quando você mudar a configuração do “cost” seu código já vai estar preparado para isso e o hash vai ser alterado para o mais novo.

Espero que isso ajude 🙂

1 pensamento em “Como armazenar as senhas corretamente com PHP”

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *