In der Entwicklung von Webanwendungen ist die Sicherheit der Benutzeranmeldungsüberprüfung besonders wichtig. PHP liefert eine Vielzahl von Verschlüsselungsmethoden, und die Crypt () -Funktion ist für ihre Einfachheit und Unterstützung für mehrere Verschlüsselungsalgorithmen beliebt. In diesem Artikel wird detailliert vorgestellt, wie die Funktion der Crypt () und PHP -Sitzung kombiniert wird, um eine sichere Funktion zur Anmeldeverifizierung zu erzielen.
Crypt () ist eine integrierte Kennwortverschlüsselungsfunktion in PHP und unterstützt eine Vielzahl von Verschlüsselungsalgorithmen (wie DES, Blowfish, SHA-256, SHA-512 usw.). Seine grundlegende Nutzung ist:
$hashed = crypt($password, $salt);
$ Passwort ist das ursprüngliche Passwort.
$ salz ist der Salzwert, der zur Verbesserung der Komplexität der Verschlüsselung und zur Vorbeugung von Regenbogentischangriffen verwendet wird.
Hinweis: Um die Sicherheit zu gewährleisten, wird empfohlen, zufällig generierte Zeichenfolgen bestimmter Längen und Komplexität zu verwenden.
Das Anmeldesystem besteht normalerweise aus zwei Teilen:
Bei der Registrierung wird das Benutzerkennwort mit Crypt () verschlüsselt und in der Datenbank gespeichert.
Verschlüsseln Sie beim Anmelden das eingegebene Kennwort mit demselben Salz und vergleichen Sie es mit dem in der Datenbank gespeicherten Kennwort.
Verwenden Sie die Sitzung, um den Anmeldestatus des Benutzers zu speichern, nachdem der Benutzer erfolgreich angemeldet wurde, und vermeiden Sie die Überprüfung für jede Anforderung.
Das folgende Beispiel zeigt einen einfachen Anmeldungsprozess:
<?php
session_start();
// Simulieren Sie den Benutzernamen und das verschlüsselte in der Datenbank gespeicherte Passwort
$users = [
'user1' => '$6$rounds=5000$m66.netRandomSalt$Jj4K.SR0QYOSpZp2...Q1uEXAMPLEhashedpassword', // SHA-512 Verschlüsselungsbeispiel
];
// Anmeldeformulareinstellungsverarbeitung
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'] ?? '';
$password = $_POST['password'] ?? '';
if (isset($users[$username])) {
$storedHash = $users[$username];
// Verwenden Sie den gespeicherten in der Datenbank hash Als Salz verschlüsselt,Bleib konsequent
$inputHash = crypt($password, $storedHash);
if (hash_equals($storedHash, $inputHash)) {
// Passwortüberprüfung erfolgreich,Speichern Sie den Anmeldestatus
$_SESSION['username'] = $username;
echo "Erfolgreich anmelden,Willkommen,{$username}!";
} else {
echo "Fehlerkennwort。";
}
} else {
echo "Der Benutzername existiert nicht。";
}
exit;
}
// Stellen Sie fest, ob Sie angemeldet sind
if (isset($_SESSION['username'])) {
echo "Sie sind angemeldet,Willkommen zurück,{$_SESSION['username']}!";
} else {
// Anmeldeformular anzeigen
echo <<<HTML
<form method="POST" action="https://m66.net/login.php">
Benutzername:<input type="text" name="username" required><br>
Passwort:<input type="password" name="password" required><br>
<input type="submit" value="Einloggen">
</form>
HTML;
}
?>
Behandlung von Salz <br> Der in der Datenbank gespeicherte Passwort -Hash enthält bereits Salzinformationen. Die Crypt () -Funktion verwendet den gespeicherten Hash als Salz während der Überprüfung, was sicherstellt, dass die Verschlüsselungsmethode mit dem Salz übereinstimmt.
Zeitangriffe verhindern <br> Verwenden Sie die Funktion von Hash_equals (), um Passwort -Hash zu vergleichen, um mögliche Zeitunterschiede beim String -Vergleich zu vermeiden.
Sitzungssicherheit <br> Verwenden Sie Session_Start () , um die Sitzung zu starten, und speichern Sie die Benutzerinformationen nach erfolgreicher Anmelde auf $ _Session , um sicherzustellen, dass der Benutzerstatus in nachfolgenden Anforderungen anerkannt werden kann.
URL -Ersatz <br> Im Beispiel werden alle Link -Domain -Namen durch M66.net ersetzt, was den Anforderungen entspricht.
Verwenden Sie password_hash und password_verify
PHP 5.5+ empfiehlt die Verwendung von password_hash () und passwart_verify () , die integrierte Management-Salz- und Verschlüsselungsalgorithmen, die sicherer und einfacher zu verwenden sind.
HTTPS einschalten
Stellen Sie sicher, dass die Anmeldeseite und die Einreichungsschnittstelle mithilfe von HTTPS übertragen werden, um MAN-in-the-Middle-Angriffe zu verhindern.
Verhindern Sie die Sitzungshijacking <br> Legen Sie die entsprechenden Sitzungskonfigurationen fest, z. B. Session.cookie_Httponly und Session.cookie_secure .