Maison > développement back-end > tutoriel php > Pourquoi mon site membre contourne-t-il les vérifications de mot de passe même lorsque des mots de passe salés sont utilisés ?

Pourquoi mon site membre contourne-t-il les vérifications de mot de passe même lorsque des mots de passe salés sont utilisés ?

Patricia Arquette
Libérer: 2024-11-18 21:47:02
original
733 Les gens l'ont consulté

Why Does My Member Site Bypass Password Checks Even When Salted Passwords Are Used?

Comment faire la distinction entre les mots de passe salés et simples dans l'authentification de base de données

Dans l'authentification de base de données, la protection des mots de passe est cruciale. Une technique répandue consiste à utiliser des mots de passe salés, dans lesquels une chaîne aléatoire (salt) est ajoutée au mot de passe avant le hachage. Cela améliore la sécurité en rendant exponentiellement plus difficile le déchiffrement des mots de passe.

Le défi : vérifier les connexions des membres

Lors de la mise en œuvre d'un site membre avec des mots de passe salés stockés dans MySQL, un problème courant une erreur se produit pendant le processus d’authentification de connexion. Les tentatives de connexion semblent contourner les vérifications de mot de passe de manière incorrecte, permettant un accès non autorisé au site.

Inspection du code du problème

L'extrait de code suivant est utilisé pour valider les connexions des membres :

$name = mysqli_real_escape_string($connect, $_POST['name']);
$password = mysqli_real_escape_string($connect, $_POST['password']);
$saltQuery = "SELECT salt FROM users WHERE name = '$name';";
$result = mysqli_query($connect, $saltQuery);
if ($result === false){
    die(mysqli_error());
}
$row = mysqli_fetch_assoc($result);
$salt = $row['salt'];
$saltedPW = $password . $salt;
$hashedPW = hash('sha256', $saltedPW);
$sqlQuery = "SELECT * FROM users WHERE name = '$name' AND password = '$hashedPW'";

if (mysqli_query($connect, $sqlQuery)){
    echo '<h1>Welcome to the member site '.$name.'</h1>';
} else {
    echo 'error adding the query: '.$sql_q.'<br> Reason: '.mysqli_error($connect);
}
Copier après la connexion

La solution : une vérification appropriée du mot de passe

Le problème provient de l'utilisation d'une comparaison directe de mot de passe dans la requête SQL. Étant donné que les mots de passe stockés sont salés, cette méthode interprète à tort toutes les tentatives de connexion comme valides. Pour remédier à cela, nous devons mettre en œuvre les étapes suivantes :

  1. Récupérer le hachage salé de la base de données : Exécuter une requête pour récupérer le hachage du mot de passe (qui inclut le sel) correspondant au nom d'utilisateur fourni.
  2. Comparez le mot de passe saisi avec le hachage salé : Utilisez la fonction password_verify(), qui extrait automatiquement le sel et le facteur de coût du hachage, pour évaluer l'authenticité de le mot de passe saisi par rapport au hachage stocké.

Exemple de code utilisant mysqli :

// Connect to the database
$mysqli = new mysqli($servername, $username, $password, $dbname);

// Initialize variables
$username = mysqli_real_escape_string($mysqli, $_POST['username']);
$password = mysqli_real_escape_string($mysqli, $_POST['password']);

// Fetch the salted hash for the specified username
$query = "SELECT password FROM users WHERE username = ?";
$stmt = $mysqli->prepare($query);
$stmt->bind_param('s', $username);
$stmt->execute();
$stmt->bind_result($hashedPassword);
$stmt->fetch();

// Verify the entered password
if (password_verify($password, $hashedPassword)) {
    // Login successful
    echo '<h1>Welcome to the member site '.$username.'</h1>';
} else {
    // Password did not match
    echo 'Invalid login credentials';
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal