Heim >Backend-Entwicklung >PHP-Tutorial >Warum umgeht meine Mitgliederseite die Passwortprüfung, selbst wenn gesalzene Passwörter verwendet werden?

Warum umgeht meine Mitgliederseite die Passwortprüfung, selbst wenn gesalzene Passwörter verwendet werden?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-18 21:47:02715Durchsuche

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

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:

  1. Gesalzenen Hash aus der Datenbank abrufen: Führen Sie eine Abfrage aus, um den entsprechenden Passwort-Hash (der den Salt enthält) abzurufen an den angegebenen Benutzernamen.
  2. Vergleichen Sie das eingegebene Passwort mit dem Salted Hash:Verwenden Sie die Funktion „password_verify()“, die automatisch den Salt- und Kostenfaktor aus dem Hash extrahiert, um die Authentizität von zu beurteilen das eingegebene Passwort gegen den gespeicherten Hash.

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!

Stellungnahme:
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