Dernièrement, j'ai essayé d'implémenter ma propre sécurité sur un script de connexion sur lequel je suis tombé par hasard sur Internet. Après avoir eu du mal à apprendre à créer mon propre script pour générer un sel pour chaque utilisateur, je suis tombé sur password_hash
.
Si je comprends bien (d'après la lecture de cette page), lorsque vous utilisez password_hash
, le sel est déjà généré dans la ligne. C'est réel?
Mon autre question est la suivante : ne serait-il pas sage d'avoir 2 types de sel ? Un directement dans le fichier et un dans la base de données ? De cette façon, si quelqu'un corrompt le sel dans la base de données, vous pouvez toujours enregistrer le sel directement dans le fichier ? J'ai lu ici que conserver le sel n'est jamais une bonne idée, mais je ne comprends toujours pas ce que les gens entendent par là.
Oui, vous avez bien compris, la fonction password_hash() générera elle-même le sel et l'inclura dans la valeur de hachage générée. Il est tout à fait correct de stocker le sel dans la base de données, même s'il est connu pour faire son travail.
Le deuxième sel que vous avez mentionné (celui stocké dans le fichier) est en fait la clé côté poivre ou serveur. Si vous l'ajoutez avant de hacher (tout comme le sel), vous ajoutez du poivre. Il existe cependant un meilleur moyen : vous pouvez d'abord calculer le hachage, puis chiffrer (dans les deux sens) le hachage à l'aide d'une clé côté serveur. Cela vous permet de changer la clé si nécessaire.
Contrairement au sel, cette clé doit être gardée secrète. Les gens mélangent souvent les choses et essaient de cacher le sel, mais il vaut mieux laisser le sel faire son travail et ajouter le secret avec la clé.
Il est recommandé d'utiliser
password_hash
pour stocker les mots de passe. Ne les séparez pas en bases de données et fichiers.Supposons que nous ayons l'entrée suivante :
Vous hachez d'abord le mot de passe en procédant comme suit :
Ensuite, visualisez le résultat :
Comme vous pouvez le voir, il est haché. (Je suppose que vous avez suivi ces étapes).
Maintenant que vous stockez ce mot de passe haché dans votre 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 le mot de passe saisi à l'aide du hachage dans la base de données, comme ceci :
Référence officielle