Heim >Backend-Entwicklung >PHP-Tutorial >Warum umgeht meine Mitgliederseite die Passwortprüfung, selbst wenn gesalzene Passwörter verwendet werden?
Wie man bei der Datenbankauthentifizierung zwischen gesalzenen und einfachen Passwörtern unterscheidet
Bei der Datenbankauthentifizierung ist der Schutz von Passwörtern von entscheidender Bedeutung. Eine gängige Technik ist die Verwendung von Salted-Passwörtern, bei denen vor dem Hashing eine zufällige Zeichenfolge (Salt) an das Passwort angehängt wird. Dies erhöht die Sicherheit, da es exponentiell schwieriger wird, Passwörter zu knacken.
Die Herausforderung: Mitgliederanmeldungen überprüfen
Bei der Implementierung einer Mitgliederseite mit gesalzenen Passwörtern, die in MySQL gespeichert sind, kommt es häufig vor Während des Anmeldeauthentifizierungsprozesses tritt ein Fehler auf. Anmeldeversuche scheinen die Passwortprüfungen falsch zu umgehen und so unbefugten Zugriff auf die Website zu ermöglichen.
Überprüfung des Problemcodes
Der folgende Codeausschnitt wird zur Validierung von Mitgliederanmeldungen verwendet:
$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); }
Die Lösung: Richtige Passwortüberprüfung
Das Problem entsteht durch die Verwendung eines direkten Passwortvergleichs in der SQL-Abfrage. Da die gespeicherten Passwörter gesalzen sind, interpretiert diese Methode alle Anmeldeversuche fälschlicherweise als gültig. Um dies zu beheben, müssen wir die folgenden Schritte implementieren:
Beispielcode mit 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'; }
Das obige ist der detaillierte Inhalt vonWarum umgeht meine Mitgliederseite die Passwortprüfung, selbst wenn gesalzene Passwörter verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!