So authentifizieren Sie Benutzer mit gesalzenen Passwörtern aus einer Datenbank
In datenbankgesteuerten Webanwendungen ist es wichtig, Benutzerpasswörter vor unbefugtem Zugriff zu schützen . Das Salten von Passwörtern ist eine entscheidende Sicherheitsmaßnahme, die den Schutz der Benutzeranmeldeinformationen verbessert. In dieser Frage-und-Antwort-Runde untersuchen wir, wie man ein gesalzenes Passwort aus einer Datenbank für eine sichere Benutzerauthentifizierung abruft und authentifiziert.
Das Problem:
Ein Entwickler hat ein Mitglied implementiert Site mit gesalzenen Passwörtern, die in einer MySQL-Datenbank gespeichert sind. Aufgrund eines Problems bei der Überprüfung der Existenz eines Mitglieds ist jedoch über die Anmeldeseite kein Zugriff auf die Mitgliederseite möglich.
Code zur Überprüfung der Existenz eines Mitglieds:
$servername = 'localhost'; $username = 'root'; $pwd = ''; $dbname = 'lp001'; $connect = new mysqli($servername, $username, $pwd, $dbname); if ($connect->connect_error) { die('connection failed, reason: ' . $connect->connect_error); } $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:
Der Fehler im Code liegt in der Überprüfung der Mitgliederexistenz. Um das Passwort des Benutzers korrekt mit dem gespeicherten Salted-Passwort-Hash zu verifizieren, sind die folgenden Schritte notwendig:
Gesalzenes Passwort-Hash aus der Datenbank abrufen:
Verwenden Sie eine SQL-Abfrage, um den gesalzenen Passwort-Hash aus der Datenbank für den angegebenen Benutzernamen abzurufen.
Berechnen Sie das Hash-Passwort:
Verketten Verknüpfen Sie das vom Benutzer eingegebene Passwort mit dem abgerufenen Salt und hashen Sie es mit derselben Hashing-Funktion, die zum Speichern des Passworts in der Datenbank verwendet wird.
Vergleichen Sie das gehashte Passwort mit dem gespeicherten Hash:
Vergleichen Sie das berechnete Hash-Passwort mit dem gespeicherten Salted-Passwort-Hash. Wenn sie übereinstimmen, ist das Passwort des Benutzers korrekt.
Unten finden Sie eine aktualisierte Version des Mitgliedsüberprüfungscodes, der die folgenden Schritte enthält:
$verifyQuery = "SELECT id, password FROM users WHERE name = '$name';"; $verifyResult = mysqli_query($connect, $verifyQuery); if ($verifyResult === false) { die(mysqli_error()); } $verifyRow = mysqli_fetch_assoc($verifyResult); if ($verifyRow) { $storedHash = $verifyRow['password']; $saltedPW = $password . $verifyRow['salt']; $hashedPW = hash('sha256', $saltedPW); if ($hashedPW === $storedHash) { // User authenticated successfully } else { // Incorrect password } } else { // User not found }
Fazit:
Durch die Befolgung dieser Schritte können Entwickler Benutzerpasswörter sicher anhand von in einer Datenbank gespeicherten Salted-Passwort-Hashes überprüfen. Dies stellt die Integrität und den Schutz der Benutzeranmeldeinformationen sicher und schützt vor unbefugtem Zugriff.
Das obige ist der detaillierte Inhalt vonWarum funktioniert meine Salted-Passwort-Authentifizierung in meiner MySQL-Datenbank nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!