Stats
- 17 connecté(e)s
- 5159 membres
-
- 1218 news
- 3107 topics
- 70 articles
- 35 questions
- 144 sites
-
- St(e) Matthias
Proverbes
- L'empreinte d'un homme sur un autre est éternelle, aucun destin n'a traversé le nôtre impunément
- [ François Mauriac ]
Partenaires

Le stockage des mots de passe
Posté par kazhar le 29/05/2006 dans la catégorie Divers
-
- Si vous avez besoin de créer un script gérant des utilisateurs et leurs mots de passe, vous allez vous confronter aux problèmes de sécurité quant au stockage de ces mots de passe.
Ceux-ci ne peuvent être stockés en clair dans votre base de données, et le plus grand soin doit leur être apporté.
Dans cet article, nous allons voir tout ce à quoi vous devez penser lorsque vous stocker des mots de passe avec PHP, et comment résoudre certains problèmes.
Comme nous venons de le dire, vous ne pouvez stocker les mots de passe en clair, et ils doivent être cryptés ou hashés. Le meilleur moyen étant de les hasher et non de les crypter.
La différence entre hasher et crypter est qu'il est totalement impossible de décoder une chaine hashée alors que le cryptage rends possible la récupération de la valeur originale (par décryptage)
Vous devez toujours hasher vos mots de passe importants et autres données sensibles car cela signifie que personne, pas même un administrateur ne peut retrouver la valeur originale.
Bien sur, si vous avez besoin de retrouver les données originales, vous devrez utiliser le cryptage. Mais dans notre cas de mots de passe, ce n'est pas utile.
La méthode la plus simple pour hasher un mot de passe est la fonction md5(), qui est fournie en standard avec php, et est utilisée comme ceci :
Code :
<?php
$secure_password = md5($password);
?>
Une autre fonction standard de hash fournie avec php est sha1(), qui fait la même chose que md5, mais de manière différente, et légèrement plus sure. il est utilisé de la même manière :
Code :
<?php
$secure_password = sha1($password);
?>
Maintenant, votre stockage de mots de passe est plus sécurisé. Mais il y a encore une étape par laquelle vous devez passer pour les rendre sécurisés.
Au lieu d'envoyer le mot de passe entier vers la fonction de hash, vous pouvez y ajouter une autre petite chaine de caractères, appellée "salt" avant le hash, qui fera de votre mot de passe une chaine réellement unique.
Chaque utilisateur aura son propre "salt", et cela signifie que chaque utilisateur aura un mot de passe hashé completement unique, même si leurs mots de passe sont els mêmes.
Cela rends le crackage du mot de passe encore plus difficile car cela rends le crackage par "brute force" quasiment impossible. Voici un exemple :
Code :
<?php
$password = $_POST['password'];
// Génération d'une chaine de caractères aléatoire
$salt = substr(md5(uniqid(rand(), true)), 0, 5);
// Hash
$secure_password = md5($salt . md5($password));
?>
Comme vous pouvez le voir, nous avons utilisé la fonction uniquid() pour générer une chaine de caractères aléatoire, et ensuite, utilisé celle-ci pour hasher le mot de passe.
Il est important de stocker le hash dans la base de données car vous en aurez besoin plus tard pour identifier les utilisateurs.
Exemple :
Code :
<?php
$username = $_POST['username'];
$password = $_POST['password'];
// Récupération des données de l'utilisateur
$user = getUser($username);
// Comparaison des mots de passe
if ($user->password != md5($user->salt . md5($password))) {
die ('Nom d\'utilisateur ou mot de passe invalide');
}
// ... L'utilisateur a entré un mot de passe correct. loguage
?>
PHPortail.net © 2003 - 2008; Tous les droits réservés - Webmaster: Philippe Gamache
Site valide Xhtml Strict, CSS 2