(15-10-2012, 10:05 AM)Sephi-Chan a écrit :Akira a écrit :Bref, la vrai question n'est pas : "Pourquoi envoyer le mot de passe en clair ?" mais plutôt : "Pourquoi ne pas effectuer un pré-hashage en javascript du mot de passe, avant le submit du form ?"
Ah bon ? Je parle pas de dévoiler la façon de hasher / saler les passwords. Mais d'appliquer ne serait-ce qu'un sha1. C'est d'ailleurs pour cela que je parle de pré-hashage. Un hashage à deux vitesses en fait.
Imagine deux fonctions de hashage :
Code PHP :
// implémenté côté serveur et client (PHP et JS donc...)
function public_hash($string)
{
// peut être un peu plus complexifié
return sha1($string);
}
// implémenté uniquement côté serveur (PHP)
function private_hash($string)
{
// routine de hashage et de salage
// [...]
return $hashed_string;
}
Si le mec n'a pas javascript activé, bah tu hashes pas mais en amont, avant d'appliquer ton private_hash, tu applique le public_hash. Y'a rien d'exceptionnel. C'est simple à mettre en oeuvre. Perso j'utilise à fond cette technique ! En plus de ça, ben du HTTPS et en avant guingamp !
Contrairement à ce que tu prétends, ca permet simplement de ne pas faire circuler l'info en clair, surtout quand on a pas de HTTPS. Et ne dévoile aucunement ta politique de hashage.
Ah, et puis, bah pour détecter le javascript, un petit input type="hidden" rajouté à la volée au formulaire, et puis tu sais ce qui reste à faire côté serveur.
Quelques ressources :
Librairie jQuery SHA1
Librairie jQuery de Cryptage / hashage
Librairie Javascript (pur, donc) MD4, MD5, SHA1
Et un petit comic pour illustrer tout ça
Code javascript (contrairement à ce que le plugin annonce) :
Code PHP :
// implémentation foireuse et improvisée =D
$(document).ready(function() {
$('#myForm').append("<input type="hidden" name="passwordhidden" id="passwordhidden" value="" />);
$('input[type="password"]').on("change", function(){
$('#passwordhidden').val($.sha1($this.val()));
});
});