La RFC "password_hash" vient d'être acceptée et sera ajoutée à PHP 5.5
Pourquoi cette nouvelle API ?
Généralement lorsque l'on parle de hash de mot de passe les utilisateurs se tournent vers md5 ou sha, deux algorithmes qui ne devraient plus être utilisés (nombreuses rainbow tables, failles dans l'algorithme ...)
Une solution efficace pour hasher ses mots de passe est l'utilisation de bcrypt mais malheureusement peu de développeurs l'utilisent notamment à cause de la fonction crypt() de php qui n'est pas des plus faciles à utiliser.
Cette nouvelle API vient donc combler ce manque avec une solution simple et efficace pour protéger ses mots de passe.
Comment ça marche ?
La RFC propose quatre nouvelles fonctions, deux nous intéressent particulièrement puisqu'elles permettent de hasher et vérifier un hash :
Pour hasher et vérifier un mot de passe, c'est donc très simple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 password_hash($password, $algo, $options = array()); password_verify($password, $hash);
Vous aurez remarqué la spécification d'un coût dans les options, ce coût définit la complexité du mot de passe. Plus le coût est élevé plus le hash est long à obtenir et par conséquent difficile à attaquer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 $password = "motdepasse"; $hash = password_hash($password, PASSWORD_BCRYPT, array("cost" => 10)); if (password_verify($password, $hash)) { echo 'Mot de passe OK'; } else { echo 'Erreur mot de passe'; }
Avec cette API, plus besoin de se soucier des salts aléatoires, tout est géré en interne, le développeur n'a plus qu'à protéger son mot de passe.
La compatibilité future n'a pas été oubliée puisque grâce à password_needs_rehash il sera possible de rehasher un mot de passe si l'algorithme par défaut évolue.
Je n'ai pas PHP 5.5 !
Tout n'est pas perdu , il existe de nombreuses implémentations de bcrypt en PHP. Tel que phpass
Toutes les infos et des exemples sur la RFC password_hash : voir
Partager