Chargement...

PHP / MySQL : bien enregistrer les mots de passe dans la base de données


Vous possédez un site internet qui stocke les mots de passe de vos utilisateurs?
Il vous faudra donc bien protéger vos mots de passe sans quoi vous risquer de vous faire pirater facilement.

MD5

Le base de toute protection est de hasher le mot de passe, c'est-à-dire lui donner une forme ou il est impossible de faire le processus inverse pour deviner le mot de passe initial.

Exemple :
<?php
$mot_de_passe = "olivier";
echo md5( $mot_de_passe ); // d3ca5dde60f88db606021eeba2499c02
?>
Le problème c'est que maintenant vous savez quelle forme aura le mot de passe "olivier". Si un utilisateur pirate votre base de données et voit le mot de passe d3ca5dde60f88db606021eeba2499c02 il saura qu'en réalité le mot de passe est olivier.

Le problème des technologies d'aujourd'hui c'est qu'elles sont très puissantes et très intelligentes, et si vous tapez "d3ca5dde60f88db606021eeba2499c02" sur Google, il vous dira en 0,000009 seconde que cela correspond à un mot de passe MD5 qui a été hashé et qui avait pour valeur "olivier".

C'est d'ailleurs pour cette raison qu'on vous dit sur plein de sites qu'un mot de passe qui mélange des chiffres et des lettres est un mot de passe plus sûr pour la sécurité de votre compte.

MD5 + SALT

Pour bien sécuriser les mots de passe dans votre base de données, utilisez un salt.
Salt ( grain de sable ) est un ajout dans la valeur du mot de passe, qui permet de feinter l'utilisation habituelle du MD5.

Exemple:
<?php
$mot_de_passe = "olivier";
$salt = "@|-°+==00001ddQ"
echo md5( $mot_de_passe . $salt ); // c8a517107aca7f1fcac87004d041a9f1
?>
J'ai vérifié le jour ou j'écris ces lignes : la valeur "c8a517107aca7f1fcac87004d041a9f1" n'existe pas sur Google.
Super cette methode semble sécurisée! Si un pirate met la main sur la base de données, tant qu'il ne connait pas la valeur du salt, il ne pourra pas en faire grand chose.

Le problème de cette méthode c'est que si deux utilisateurs ont le même mot de passe, le hash sera le même et cela peut être gênant. Pour plus de sécurité on peut ajouter une valeur unique dans la création du hash : le mail de l'utilisateur par exemple et on peut même complexifier la logique MD5 :

Exemple:
<?php
$utilisateur = "olivier@uneadressebidon.com";
$mot_de_passe = "olivier";
$salt = "@|-°+==00001ddQ"
echo md5( $mot_de_passe . $salt . $utilisateur . $salt . $utilisateur . $utilisateur ); // c6545123d1213h1004d041a9f1
?>
Bonne chance au pirate pour deviner votre construction de mot de passe.


UNE QUESTION SUR L'ARTICLE?


CSSW Apprendre à créer son site web CSSW