ElePHPant (Eu tenho um desses! :D)

PHP 5.5 – API de senhas

A nova API de senhas do PHP foi lançada junto com outras novidades do PHP 5.5.

O objetivo principal dessa API é padronizar/facilitar o trabalho de hashing de senhas… Ela funciona como um wrapper pra função crypt.

Com essa nova api, foram criadas quatro novas funções:

Vamos ver o uso das duas funções mais importantes (e úteis) dessa API..

password_hash

O método password_hash é o que você usará para fazer o hash de senhas, ele recebe três parâmetros: a senha (string), o algoritmo (constante) e uma lista opções (opcional).

Por exemplo:

A vantagem de usar esse método é que você não precisa montar o salt como acontecia no crypt… Ele mesmo gera um salt “correto” para o algoritmo escolhido, que por padrão será o bcrypt.

É esse valor retornado pelo password_hash que você deverá salvar no banco de dados.

password_verify

Uma vez que você já tem o hash da senha do seu usuário salvo no banco, você precisa de uma forma de – no futuro – verificar se a senha que ele digitou (texto plano) combina com a o hash no seu banco de dados, e você fará isso usando o método password_verify.

Ele recebe dois parâmetros: a senha em texto plano e o hash da senha à ser comparada.

Conclusão

Essa nova API de senhas do PHP veio pra ficar, e já consigo ver vários frameworks adotando seu uso como padrão… talvez o único empecilho seja que é uma versão muito recente, e isso deve demorar um pouco.

De qualquer forma, se você já poder usar o PHP 5.5, não há por que não usar essas funções para garantir a segurança dos dados de seus usuários. :)

18 thoughts on “PHP 5.5 – API de senhas

  1. Luiz Eduardo

    Para PHP sair de uma linguagem boa para Excelente no quesito orientação a objeto, falta métodos sobrecarregados =/

  2. Pingback: PHP 5.5 – Novidades e novas funcionalidades | Breno Giovanelli

  3. Lucas

    Digamos que eu tenha senhas de formas diferentes(metodos de encripty diferente), salvas no banco de dados.. como eu teria que fazer com que as novas api reconhecessem ou atualizasse os essas senhas ?

    1. Carlos André Ferrari

      Você provavelmente usa md5 para armazenar, neste caso, na hora de verificar é só aplicar a seguinte lógica

      1) verifica se o length da senha que o bd retornou tem 32 caracteres. Se sim autentica o usuário, se ele validar, você usa a senha que foi digitada, encripta com a nova função e grava no banco. o usuário loga normalmente

      2) caso a senha não tenha 32 caracteres você simplesmente autentica com as funções de password.

      Nesse caso, seria necessário esperar que todo mundo se autentique para renovar a senha, o que você pode fazer é mandar um email pra todo mundo e solicitar a modificação.

  4. Pingback: PHP 5.5 – Novidades e novas funcionalidades | Velame Cursos

  5. Pingback: Criando um sistema de login com PHP e MySQL | Thiago Belem / Blog

  6. Roberto

    Bom dia Thiago.
    Obrigado pelo post esclarecedor.

    Mas, e quanto a segurança dessa API? Você considera confiável usar ela ao invés de implementar um meio próprio de gerar os hashs e trabalhar com as senhas?

    1. Thiago Belem Post author

      Sem dúvidas uma API nativa da linguagem é muito mais segura e eficiente que uma implementação própria em cima da linguagem… Após a versão 5.5, criar um método de hashing proprio (mesmo que ele use a função crypt) seria reinventar a roda.

  7. Pingback: PHP 5.5 - Novidades e novas funcionalidades | Thiago Belem / Blog

Comments are closed.