web-dev-qa-db-fra.com

Moyen approprié d'envoyer le nom d'utilisateur et le mot de passe du client au serveur

Cette question n'est pas spécifique à la langue. Je suis curieux de savoir comment envoyer correctement un nom d'utilisateur et un mot de passe à partir d'un formulaire de connexion à un serveur.

Ma conjecture est de hacher le mot de passe, de mettre le nom d'utilisateur/mot de passe dans le corps POST et de l'envoyer sur HTTPS. Quelle est la meilleure façon?

Pour faire bonne mesure, je mentionnerai une méthode moins qu'idéale:

http://www.somesite.com/login?un=myplaintextusername&pw=myplaintextpassword
37
SundayMonday

Les parties importantes sont que vous transmettez les données du formulaire dans le POST (de cette façon, il n'est mis en cache nulle part, ni normalement stocké dans aucun fichier journal) et utilisez HTTPS (de cette façon, si vous avez une bonne Certificat SSL/TLS, personne ne peut renifler le mot de passe en observant le trafic de votre réseau. Si vous faites cela, il n'y a pas de gros avantage supplémentaire à hacher le mot de passe, du moins pas pendant la transmission.

Pourquoi les gens parlent-ils de hachage des mots de passe, alors? Parce que normalement, vous ne voulez pas stocker le mot de passe de l'utilisateur sous forme de texte en clair dans votre base de données côté serveur (sinon l'impact d'un serveur compromis est encore pire qu'il ne le serait autrement). Au lieu de cela, vous stockez généralement un formulaire salé/haché, puis appliquez le même sel/haché au mot de passe reçu via les données du formulaire, afin de pouvoir comparer les deux.

Pour plus d'informations sur le salage, voir http://en.wikipedia.org/wiki/Salt_ (cryptographie) (et les liens qui s'y trouvent).

55
Jan Krüger

Si vous utilisez HTTPS, vous pouvez envoyer le nom et le mot de passe dans un corps POST qui sera protégé contre les écoutes (en supposant que vous faites confiance à SSL). Vous n'avez pas besoin de hacher le mot de passe , si vous le faites, le hachage du mot de passe est tout aussi utile que le mot de passe lui-même, donc il ne vous rapporte rien.

Une question plus importante est de savoir comment stocker le mot de passe côté serveur. Le stockage d'un mot de passe haché n'est acceptable que si vous utilisez un bon algorithme tel que scrypt . Mais ce n'est toujours pas aussi bon qu'un protocole avancé tel que SRP .

8
Greg Hewgill

Vous devez toujours utiliser HTTPS et éviter le code homebrewed. SSL se chargera du hachage et du chiffrement. C'est la SEULE méthode sécurisée.

Assurez-vous également de hacher les mots de passe côté serveur et de stocker le hachage, pas le mot de passe d'origine. Comparez ensuite les hachages pour vérifier les connexions. Cela empêchera les attaquants de lire des mots de passe en texte brut directement depuis votre base de données s'il est compromis.

5
Dave L