Maison > Questions et réponses > le corps du texte
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 du 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), 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 judicieux 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à.
P粉5205457532023-10-14 20:22:40
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.
// Hash a new password for storing in the database. // The function automatically generates a cryptographically safe salt. $hashToStoreInDb = password_hash($_POST['password'], PASSWORD_DEFAULT); // Check if the hash of the entered login password, matches the stored hash. // The salt and the cost factor will be extracted from $existingHashFromDb. $isPasswordCorrect = password_verify($_POST['password'], $existingHashFromDb);
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é.
P粉3109311982023-10-14 09:42:05
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 :
$password = $_POST['password'];
Vous hachez d'abord le mot de passe en procédant comme suit :
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
Ensuite, visualisez le résultat :
var_dump($hashed_password);
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 :
// Query the database for username and password // ... if(password_verify($password, $hashed_password)) { // If the password inputs matched the hashed password in the database // Do something, you know... log them in. } // Else, Redirect them back to the login page.