20-01-2011, 01:27 AM
(Modification du message : 20-01-2011, 05:45 PM par Sephi-Chan.)
La sécurité par le "Salt".
1. Explications.
Le "Salt" est une méthode qui est utilisée de plus en plus dans la programmation pour sécuriser des données.
Cette méthode repose sur un principe simple: Chaque compte est unique et possède donc une clé et un hash unique.
On est tous un grain de sable dans un immense sablier et chaque grain est unique par sa composition.
Cela permet une sécurité accrue car même si une personne mal-intentionnée réussi a récupérer les infos de votre base de données et de trouver l'algorithme pour passez outre un mot de passe, elle ne pourra le faire que pour un seul compte.
Cette méthode permet donc de "Perdre" le mot de passe d'origine, ainsi, on ne peut, a moins d'être un hacker plus que pro, retrouver votre mot de passe réel.
On parle donc de HASH et plus de cryptage.
2. Prérequis à la mise en place.
Pour mettre en place cette méthode, vous avez besoin de:
3. On se lance.
A. Création du compte.
B. Récupération des infos.
4. Conclusion.
Cette méthode est vraiment très simple a mettre en place et vous permettra d'avoir une sécurité maximale pour vos utilisateurs.
Alors n'hésitez pas a mettre votre "grain de sel" pour ennuyer les personnes malveillantes
PS: Le script est a titre informatif, il faut donc l'implanter et non simplement le copier. En efftet, il ne prend pas en compte le "Never trust user input". De plus ayant l'habitude de travailler avec un ORM et en orienté objet, les méthodes d'insertions et de récupération de données sont plus que douteuse ;P
En espérant vous avoir aidé, Viciousity.
Un grand merci a anthor pour le hash('sha256',"");
1. Explications.
Le "Salt" est une méthode qui est utilisée de plus en plus dans la programmation pour sécuriser des données.
Cette méthode repose sur un principe simple: Chaque compte est unique et possède donc une clé et un hash unique.
On est tous un grain de sable dans un immense sablier et chaque grain est unique par sa composition.
Cela permet une sécurité accrue car même si une personne mal-intentionnée réussi a récupérer les infos de votre base de données et de trouver l'algorithme pour passez outre un mot de passe, elle ne pourra le faire que pour un seul compte.
Cette méthode permet donc de "Perdre" le mot de passe d'origine, ainsi, on ne peut, a moins d'être un hacker plus que pro, retrouver votre mot de passe réel.
On parle donc de HASH et plus de cryptage.
2. Prérequis à la mise en place.
Pour mettre en place cette méthode, vous avez besoin de:
- 1 base de donnée
- 1 table pour stocker vos comptes dans celle-ci
- 3 champs respectivement: username, password_salt, password_hash
3. On se lance.
A. Création du compte.
/*
Dans le script ci-dessous imaginons qu'un formulaire d'inscription a été soumis avec comme données:
@ $_POST['username']
@ $_POST['password']
*/
/* HASH: Perdre l'information.
===========================
Cette méthode va permettre de perdre une information en créant une nouvelle.
---------------------------------------------------------------------------------------------*/
function hash_string(string1,string2){ hash('sha256',"'.$string1.'::'.$string2.'"); }
/* SECURISATION: Crée les nouvelles données protégées.
===================================================
On crée le "salt" unique en utilisant un facteur aléatoire.
Utilisons donc quelque chose qui une fois écoulé ne peut plus se
reproduire: le temps.
---------------------------------------------------------------------------------------------*/
$password_salt = hash_string(time(),$_POST['password']); // Unique grâce à time().
$password_hash = hash_string($password_salt,$_POST['password']); // Unique grâce au salt.
$new_account = "INSERT INTO accounts (username,password_hash,password_salt) VALUES('$_POST['username']','$password_hash','$password_salt')";
mysql_query($new_account);
B. Récupération des infos.
/*
Dans le script ci-dessous imaginons qu'un formulaire a été soumis avec comme donnée:
@ $_POST['username']
@ $_POST['password']
*/
/* QUI: Retrouver le compte que l'on doit connecter.
=================================================
Pour que la méthode marche, nous avons besoin du salt et du hash afin de comparer les
données et ainsi vérifier si elles sont correctes.
---------------------------------------------------------------------------------------------*/
$select_user = mysql_query("SELECT password_hash,password_salt FROM accounts WHERE username='$_POST['username']'");
$account = mysql_fetch_array($select_user);
/* COMPARAISON: Vérifier si le mot de passe correspond.
====================================================
Nous allons maintenant vérifier si le mot de passe correspond au hash stocké dans la
base de données. Nous avons donc besoin de la même fonction hash_string() que celle de
l'inscription.
---------------------------------------------------------------------------------------------*/
function hash_string(string1,string2){ hash('sha256',"'.$string1.'::'.$string2.'"); }
if(!empty($account) && isset($account) && $account['password_hash'] == hash_string($account['password_salt'],$_POST['password'])){
/* Les lignes ci-dessus sont les plus importantes.
En effet, vous pouvez remarquer que l'on ne cherche pas a décrypter mais à comparer le hash
du mot de passe soumis avec le salt du compte concerné pour voir si il correspond au HASH du compte.
Ainsi, en aucun cas on ne réutilise le mot de passe brut du compte.
On agit donc par comparaison et non plus par décryptage */
} else {
// Mauvais mot de passe.
}
4. Conclusion.
Cette méthode est vraiment très simple a mettre en place et vous permettra d'avoir une sécurité maximale pour vos utilisateurs.
Alors n'hésitez pas a mettre votre "grain de sel" pour ennuyer les personnes malveillantes
PS: Le script est a titre informatif, il faut donc l'implanter et non simplement le copier. En efftet, il ne prend pas en compte le "Never trust user input". De plus ayant l'habitude de travailler avec un ORM et en orienté objet, les méthodes d'insertions et de récupération de données sont plus que douteuse ;P
En espérant vous avoir aidé, Viciousity.
Un grand merci a anthor pour le hash('sha256',"");