Bonjour,
Lorsque j'ai commencé à travailler sur des sites internet, en 1999, la sécurité était loin d'être le point le plus épineux, et les outils à disposition étaient bien moins avancés qu'actuellement : pas de LDAP, pas de possibilité de crypter un mot de passe depuis la base de données, pas de libs existantes en PHP ou ASP, etc.
Du coup, j'ai pris l'habitude de stocker dans mes tables "utilisateur" le mot de passe en claire.
Régulièrement, je vois des personnes, à la limite de l'intégrisme, ne jurer que par un cryptage MD5 du mot de passe dans la base.
Et là, je bloque.
En effet, lorsqu'on stock le mot de passe de façon crytée, le seul avantage que je vois, c'est qu'on ne connait plus le mot de passe "tel qu'il est saisi par l'utilisateur".
Mais si le mot de passe crypté fuite, le risque d'utilisation de la signature MD5 reste entier... Sans parler d'un simple brute force sur cette signature, qui permettra en quelques minutes, au pire quelques heures, de retrouver le mot de passe original.
De ce fait, je ne vois pas bien en quoi c'est tellement mieux que de stocker le mot de passe en clair.
Je me pose cette question surtout car je vois très souvent des personnes partir du principe que le mot de passe est crypté, ne vont pas chercher à protéger la table de quelque que façon que ce soit.
Habituellement, je fais un certain nombre d'actions au niveau de la base de données de façon à ne pouvoir en aucun cas accéder au champ mot de passe par requête :
- Suppression des droits de lecture et autres sur la colonne mot de passe, voir de toute la table, pour tous les utilisateurs
- Création de procédures/fonctions stockées CheckPassword(login, password), SetPassword(login, oldpwd, newpwd) etc. qui seront les seules façon d'accéder à cette colonne. En aucun cas ces fonction ne retourneront la valeur
=> A quoi ça servira de rajouter une encryption ?
Cordialement,
Sylvain Devidal
Partager