Heim > Backend-Entwicklung > PHP-Tutorial > Warum funktioniert meine Salted-Passwort-Authentifizierung in meiner MySQL-Datenbank nicht?

Warum funktioniert meine Salted-Passwort-Authentifizierung in meiner MySQL-Datenbank nicht?

Susan Sarandon
Freigeben: 2024-11-13 10:03:02
Original
796 Leute haben es durchsucht

Why is my salted password authentication not working in my MySQL database?

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);
}
Nach dem Login kopieren

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:

  1. 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.

  2. 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.

  3. 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
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage