É seguro criptografar minhas variáveis POST para md5 antes de enviá-las?

5

Eu tenho um formulário de login simples, onde um usuário digita seu nome de usuário e senha. Quando o php recebe os vars via POST, ele criptografa a senha para md5 e a compara com os registros do banco de dados.

A minha pergunta é: seria mais seguro criptografar a senha com javascript no navegador, antes que as variáveis sejam enviadas? Eu sei que não é um método infalível, mas isso impediria que a rede de pessoas farejasse minhas senhas? Ou isso torna as senhas mais vulneráveis de alguma forma?

Obrigado.

btw o script que eu vou usar para criptografar para md5 está aqui: link

    
por Mickwaffle 07.12.2010 / 02:12

4 respostas

4

Usar JavaScript para alterar a senha antes do envio pela rede é o mínimo que eu esperaria. Seria melhor ainda se você usasse CRAM-MD5 , HTTP Digest , ou SSL (especialistas gastam milhares de horas transbordando as implicações de segurança desses protocolos).

Você absolutamente deve usar sal . Se você não as senhas são facilmente revertidas usando mesas de arco-íris . Um sal muito simples que funciona razoavelmente bem, mande o servidor enviar um sal aleatório com a página. MD5 a senha, então MD5 o primeiro hash e o sal juntos. No lado do servidor, você pode armazenar a senha MD5 e executar um MD5 rápido no hash armazenado e no sal da página; comparar e autenticar adequadamente. Esse tipo de sal é conhecido como nonce . Você também deve adicionar um sal de longo domínio para a senha original e a armazenada no servidor.

Portanto, um "bom" caminho (curto de SSL e os outros mencionados acima) é:

A = MD5 ( Password + Realm)
B = MD5 ( A + Nonce)

Envie B pelo fio. Mantenha A armazenado no servidor. Ao definir A em primeiro lugar, use uma criptografia reversível simples, como ROT ou XOR. Pessoalmente, eu consideraria qualquer coisa menos do que isso irresponsável, porque muitos usuários tolamente usam exatamente a mesma senha para quase tudo ( mesmo Jeff - fundador do site - fez isso ).

    
por 07.12.2010 / 02:18
2

Não. Não faça isso. Para forçar o uso de SSL na tela de login, você saberá que o nome de usuário / senha são criptografados quando enviados.

Então, quando a senha é recebida pelo seu aplicativo PHP, ela pode armazenar a senha em MD5 ou SHA1 e armazená-la.

Para fazer login, especifique a senha recebida e compare-a com a senha armazenada em hash. Se eles corresponderem, permita que o usuário passe.

A propósito, para evitar um ataque de dicionário em seu banco de dados de senhas, você vai querer "salgar" a senha antes de fazer o hashing. Veja: link

    
por 07.12.2010 / 02:36
1

Se você usa sal em seu hash, o sniffer pode facilmente visitar sua página e obter seu hash do seu javascript. Além disso, md5 não é exatamente seguro no sentido de que não é prova de colisão. Então não faça isso, apenas use SSL se for realmente sensível.

    
por 07.12.2010 / 02:17
1

Não é proibido proteger pessoas que farejam a rede.

Pense nisso quando o usuário precisar conectar-se lá. O javascript hashes sua senha e enviá-los para o servidor. O servidor compara com o banco de dados.

Um farejador só teria que farejar a senha e enviá-la ao servidor para que seja tão segura quanto a senha de texto simples.

Como outros disseram, eu recomendo que os túneis SSL / TLS sejam estabelecidos para se conectar ao seu servidor.

    
por 07.12.2010 / 03:42