Maison >base de données >tutoriel mysql >Comment vérifier en toute sécurité les mots de passe salés dans un système de connexion à une base de données ?

Comment vérifier en toute sécurité les mots de passe salés dans un système de connexion à une base de données ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-17 08:45:25649parcourir

How Do I Securely Verify Salted Passwords in a Database Login System?

Vérification des mots de passe salés dans la connexion à la base de données

Lors du développement d'un site d'adhésion, la sécurisation des informations de connexion est cruciale. Un aspect essentiel est la mise en œuvre de mots de passe salés, qui améliorent la protection des mots de passe en ajoutant une chaîne aléatoire au mot de passe avant de le hacher.

Problème :

Dans le code fourni, le une erreur dans la page de connexion permet à tout membre d'accéder au site malgré la saisie d'un mot de passe incorrect. Cela indique un problème avec la vérification de la validité du mot de passe.

Réponse :

Pour vérifier un mot de passe salé, nous ne pouvons pas comparer directement le mot de passe saisi au hachage stocké. Au lieu de cela, nous devons :

  • Récupérer le hachage du mot de passe dans la base de données à l'aide d'une recherche par nom d'utilisateur.
  • Utilisez la fonction password_verify() pour comparer le mot de passe saisi avec le hachage récupéré. Cette fonction extrait le sel et le facteur de coût du hachage pour la comparaison.

Exemple de code pour mysqli :

$mysqli = new mysqli($dbHost, $dbUser, $dbPassword, $dbName);

// Find the stored password hash in the db
$sql = 'SELECT password FROM users WHERE username = ?';
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('s', $_POST['username']);
$stmt->execute();

// Check if user exists and fetch the hash
$isPasswordCorrect = false;
$stmt->bind_result($hashFromDb);
if ($stmt->fetch() === true) {
    $isPasswordCorrect = password_verify($_POST['password'], $hashFromDb);
}

Exemple de code pour AOP :

$dsn = "mysql:host=$dbHost;dbname=$dbName;charset=utf8";
$pdo = new PDO($dsn, $dbUser, $dbPassword);

// Find the stored password hash in the db
$sql = 'SELECT password FROM users WHERE username = ?';
$stmt = $pdo->prepare($sql);
$stmt->bindValue(1, $_POST['username'], PDO::PARAM_STR);
$stmt->execute();

// Check if user exists and fetch the hash
$isPasswordCorrect = false;
if (($row = $stmt->fetch(PDO::FETCH_ASSOC)) !== false) {
    $hashFromDb = $row['password'];
    $isPasswordCorrect = password_verify($_POST['password'], $hashFromDb);
}

En suivant ce processus, vous pouvez vérifier efficacement les mots de passe salés dans votre page de connexion, assurant la sécurité de votre site membre.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn