Quand vous créez un site avec des membres, le problème se pose toujours : Comment sauvegarder leurs mots de passe ? Nous allons donc voir les différentes méthodes possibles et essayer de trouver la plus efficace.
Tout d’abord il y a la sauvegarde du mot de passe en clair :
- Avantages : on peut renvoyer le mot de passe directement à l’utilisateur ;
- Inconvénients : c’est très indiscrets pour les utilisateurs et si la base de données est compromise vous compromettrez chacun de vos membres.
Cette solution est vraiment très dangereuse et non professionnelle, et le fait de pouvoir renvoyer le mot de passe au clair au membre n’est pas vraiment une excuse.
Ensuite, il y a la version je crypte les mots de passe avec de quoi le décrypter pour lui renvoyer : La problématique reste la même, si quelqu’un réussi à s’infiltrer dans votre système, il est fort probable qu’il réussisse aussi à décrypter les mots de passe en regardant vos scripts de renvoi du mot de passe.
Enfin la dernière solution, sûrement la meilleure, consiste à sauvegarder le hash du mot de passe (habituellement le MD5) qui est impossible à décoder (à moins de rechercher des collisions en force brute = beaucoup beaucoup beaucoup de temps
surtout si vous avez un mot de passe digne de ce nom). Ainsi si la base de données est compromise, le pirate n’a que le hash des mots de passe et ne peut donc rien en faire.
Le problème c’est qu’il est maintenant impossible de renvoyer le mot de passe original à l’utilisateur si celui-ci le perd. Beaucoup de sites vous proposerons alors de vous régénérer un mot de passe.
Pour moi la meilleure solution consiste à sauver les mots de passe en MD5, puis si l’utilisateur le perd, de recréer un mot de passe aléatoire, le lui envoyer par e-mail, et de l’obliger à changer son mot de passe à sa prochaine connexion. Pour cela, un seul champs supplémentaire suffit et tout petit peu de code.
On obtient ainsi une solution qui a mon sens semble être le meilleur compris pour l’utilisateur, sa sécurité est assurée et on réduit ainsi les chances que l’utilisateur réoubli le mot de passe généré (chose plus que probable).
A venir : un billet sur l’utilisation de crypt plutôt que MD5
