Bonjour à tous,
Après de nombreuses lectures (notamment sur ce forum), j'ai constaté plusieurs techniques de protection :
1) Lorsque l'utilisateur s'enregistre, on crée un grain de sel aléatoire. Le grain de sel est enregistré dans la bdd et il est propre à chaque utilisateur. Le mot de passe lui est hashé avec le grain de sel : sha1($pass.$graindesel). C'est cette chaine qui est stockée dans la BDD.
Lorsque l'utilisateur s'identifie, il saisit son mdp en 'clair'. Coté serveur on hashe et on fait la comparaison avec ce qu'il y a dans la BDD.
- Avantages : Si la base de données est volées, le pirate n'aura pas accès en clair aux mdp. Il ne pourra donc pas s'identifier. De plus, l'attaque brute force (avec ou sans dictionnaire) est rendu TRES difficile grâce au grain de sel.
- Inconvénient : Les mdp voyagent en clair entre le client et le serveur. Un sniffeur aurait facilement accès aux mdp.
2) Une autre méthode consiste à enregistrer les mdp en clair dans la BDD. Lorsque l'utilisateur s'identifie, le mdp est hashé coté client avec un javascript puis envoyé au serveur. Le serveur compare ce qu'il reçoit avec le hash du mdp qu'il a dans la BDD
- Avantage : Un pirate peut sniffer le mdp mais comme il est hashé il ne peut pas le connaitre.
- Inconvénients : Si la BDD est volée, les mdp sont en clair ! De plus si un sniffeur récupère les mdp en écoutant sur le réseau, je pense qu'il peut le réinjecter tel quel et accéder au site s'en s'identifier.
3) Enfin, j'ai vu une autre méthode. Lorsque l'utilisateur est enregistré, on stocke son mdp hashé. Un grain de sel est généré à chaque demande de login. Il est stocké dans une variable session et envoyé au client comme variable javascript. L'utilisateur s'identifie. Coté client, le javascript hashe le mdp avec le grain de sel : JS = sha(sha(mdp)+graindesel).
Coté serveur, on compare cette valeur avec la valeur dans la bdd (sha(mdp)) et le grain de sable en session :
if( JS == sha($mdpBDD.$_SESSION['graindesel']) ) return true;
Là, le grain de sel est supprimé.
- Avantages : Le mdp ne voyage pas en clair entre le client et le serveur.
Dans la BDD, on stocke le mdp hashé
- Inconvénients : Le mdp stocké dans la BDD est stocké sans grain de sel, juste hashé.
L'utilisateur peut désactiver JavaScript. Il faut donc prévoir la réception de deux types de données.
J'aimerai savoir ce que vous utilisez vous ? Quelle méthode vous semble la mieu ? Enfin si la dernière méthode ne vous semble pas fragile face à une attaque brute force puisque les mdp hashés sont hashés sans grain de sel ?
Merci beaucoup
Partager