Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Por que mysqli_connect() deve receber o parâmetro de senha sem criptografia?


Você, como usuário, não sabe como a senha é criptografada (na verdade, ela não é criptografada, mas com hash).

Você apenas passa a senha e o MySQL pode executar o mesmo hash da senha original e compará-la com o que está armazenado. Se você passar a versão com hash, todo o benefício do hash desaparecerá:se alguém obtiver os hashes do servidor, poderá usá-los para fazer login como se fossem senhas normais. O hash tornou-se então a senha.

O benefício adicional é que o MySQL, por ter a senha original, pode refazer o hash com um algoritmo melhor, adicionar um pouco de sal e armazenar essa versão melhorada. Se nunca obtiver o original, isso não pode ser feito. funções de senha do PHP apoie isso também. Você pode verificar com password_needs_rehash se uma senha com hash ainda estiver corretamente criptografada e atualize seu banco de dados se não estiver.

Então, por segurança, você precisará tomar outras medidas. Estes são pelo menos:
  • Armazene a senha em um arquivo de inclusão que esteja fora da raiz do documento. Dessa forma, ninguém pode abrir esse arquivo diretamente.
  • Você pode impedir que arquivos de inclusão sejam abertos sem serem incluídos (por exemplo, verificando uma definição que foi definida em index.php). Isso é bom, mas se o PHP falhar devido a um erro de configuração, as pessoas podem simplesmente navegar na fonte do arquivo, então siga a regra anterior.
  • Sempre crie um usuário de banco de dados especial. Não use root . Dê a este usuário apenas o direito suficiente para operar o banco de dados, mas não mais. Sem direitos para remover tabelas, por exemplo.
  • Sempre dê a esse usuário uma senha exclusiva. Você não precisa se lembrar dessa senha. Apenas gere lixo aleatório com muitos caracteres.
  • Altere a senha regularmente. Talvez você possa até criar um script e armazenar a senha atualizada na configuração.