Dernièrement, j'ai essayé d'implémenter ma propre sécurité sur un script de connexion que j'ai trouvé sur Internet. En essayant d'apprendre à générer un sel pour chaque utilisateur, je suis tombé sur password_hash
.
D'après ce que j'ai compris (d'après la lecture de cette page), lors de l'utilisation de password_hash
, le sel est déjà généré dans la ligne. est-ce réel?
J'ai une autre question, est-il sage d'utiliser deux sels ? Un directement dans le fichier et un dans la base de données ? De cette façon, si quelqu'un déchiffre le sel dans la base de données, vous avez toujours ce sel dans le fichier. J'ai lu ici que conserver le sel n'est jamais une bonne idée, mais j'ai toujours été confus par ce que les gens entendaient par là.
Oui, vous l'avez bien compris, la fonction password_hash() va automatiquement générer un sel et l'inclure dans la valeur de hachage générée. Stocker le sel dans la base de données est parfaitement correct et fonctionnera même s'il est connu.
Le deuxième sel que vous avez mentionné (celui stocké dans le fichier) est en fait une clé "poivre" ou côté serveur. Si vous l'ajoutez avant le hachis (comme le sel), alors vous ajoutez une sorte de poivre. Cependant, il existe une meilleure méthode : vous pouvez d'abord calculer le hachage, puis chiffrer (chiffrement bidirectionnel) le hachage à l'aide d'une clé côté serveur. De cette façon, vous pourrez changer la clé si nécessaire.
Contrairement au sel, cette clé doit rester secrète. Les gens sont souvent confus et essaient de cacher le sel, mais il est préférable de laisser le sel faire son travail et d'utiliser la clé pour ajouter le secret.
Utiliser
password_hash
est la méthode recommandée pour stocker les mots de passe. Ne les stockez pas séparément dans la base de données et les fichiers.Supposons que nous ayons l'entrée suivante :
Hachez d'abord le mot de passe par :
Ensuite, visualisez le résultat :
Vous pouvez voir qu'il a été haché (je suppose que vous avez effectué ces étapes).
Stockez maintenant ce mot de passe haché dans la base de données.Assurez-vous que la colonne de votre mot de passe est suffisamment grande pour accueillir la valeur de hachage (au moins 60 caractères ou plus). Lorsque l'utilisateur demande à se connecter, vous pouvez vérifier si le hachage dans la base de données correspond au mot de passe saisi via :
Référence officielle