Quand on se connecte sur un site (par exemple skyrock.com) on donne son pseudo et son mot de passe. Comme la connexion au site ne se fait pas en https (chiffré, en SSL) mais en http normal (en clair) si quelqu'un se trouve entre votre ordinateur et le serveur de Skyrock il pourra récupérer votre mot de passe. Ce quelqu'un ça peut donc être votre fournisseur d'accès (par exemple Free) qui pourrait vous espionner, ou plus simplement votre voisin si vous utilisez du wifi. Ca peux s'avérer plutôt gênant si vous voulez vous connecter depuis un accès wifi public (par exemple dans un hôtel ou dans le thalys) qui est potentiellement espionné par n'importe qui.
La solution au niveau du site web ça peut être de faire le login en https (donc chiffré) et je le recommende fortement si votre site touche à des numéros de CB ou des données sensibles. Mais comme le https ça bouffe pas mal de ressources quand même quand on a un site moins sensible, comme Skyrock.com, on peut vouloir utiliser quelque chose de plus léger.
La solution ici c'est d'utiliser MD5 en javascript. Le script va hasher votre mot de passe en MD5 avant de l'envoyer au serveur donc le mot de passe ne transite plus en clair entre votre ordinateur et Skyrock. Ah ben oui mais là si l'espion le vois il peut quand même renvoyer le hash qu'il aura vu passer et ça marchera, donc ça change rien au fond du problème.
Il faut donc rajouter un peu de hasard et de communication : il nous faut un challenge. Un challenge ajoute de la difficulté dans la transaction. Ainsi, quand vous chargerez la page d'accueil de Skyrock, le serveur mettra dans le code un challenge, c'est à dire par un truc un peu au hasard, par exemple "devteam", l'intérêt c'est que ça change à chaque fois que vous rechargez la page. Le challenge est transmis en clair mais c'est pas grave car le serveur l'a enregistré et c'est lui qui le donne, l'espion peut le voir mais il ne peut pas l'utiliser. Donc au moment d'envoyer le login, la page va faire du javascript et faire un md5 de votre mot de passe ajouté du mot-challenge : md5(password + challenge). Le serveur va regarder si le hash que vous lui avez envoyé correspond au hash qu'il fait lui de votre mot de passe qu'il a déjà dans la base de données (vous vous souvenez que là le mot de passe est pas transmis) et du challenge qu'il vous avait envoyé (c'est lui a qui a fait le challenge, l'espion ne peut pas le reproduire). Si c'est différent, le mot de passe ou le challenge est mauvais.
Cette méthode est simple à mettre en place, peu coûteuse et apporte un peu plus de sécurité à vos utilisateurs. Alors do it now !
Note : Pour faire du MD5 en javascript il existe
cette lib très simple.