Die Sicherheit der Kennwortverarbeitungslogik ist besonders wichtig, um alte Systeme zu pflegen und zu aktualisieren. Die von vielen alten Systemen verwendeten Kennwortverschlüsselungsmethoden sind nicht mehr sicher und sind leicht zu knacken. PHP bietet eine Crypt () -Funktion, mit der verschiedene Verschlüsselungsalgorithmen kombiniert werden können, um sichere Hash -Werte zu generieren, wodurch uns die Logik der Kennwortverarbeitung rekonstruiert und die Systemsicherheit verbessert.
In diesem Artikel wird die Verwendung von PHP -Funktion () -Funktion verwendet, sichere Salz- und Algorithmen kombinieren und allmählich unsichere Kennwortverschlüsselungsmethoden in alten Systemen ersetzen.
Crypt () ist eine integrierte Kennwort-Hash-Funktion in PHP und unterstützt eine Vielzahl von Verschlüsselungsalgorithmen wie:
Des
MD5
Blowfish
SHA-256
SHA-512
Es kann automatisch den entsprechenden Algorithmus basierend auf dem eingehenden Salz auswählen, um einen Passwort -Hash mit hoher Festigkeit zu erzeugen, was schwierig ist, umgekehrt zu werden. Im Vergleich zur direkten Verwendung von Funktionen wie MD5 und SHA1 ist Crypt () besser für die Kennwortverschlüsselung geeignet.
Viele alte Systeme haben eine einfache Kennwortverschlüsselung und können die folgenden Fehler haben:
Die Verwendung von einzelnen Hash ohne Salz (wie MD5 oder SHA1) kann leicht durch Regenbogentischangriffe geknackt werden.
Salz ist fest oder einfach und kann nicht verhindern, dass dasselbe Passwort denselben Hash erzeugt.
Durch direktes Speichern von Klartext oder einer einfachen Verschlüsselung besteht das Risiko einer Leckage.
All dies hat die Sicherheit des Systems stark reduziert.
Das folgende Beispiel zeigt, wie Hash für Passwörter mit Crypt () in Kombination mit Blowfish -Algorithmus generiert wird.
<?php
// Benutzer eingereichtes Klartextkennwort
$password = 'user_password';
// Zufällige Salze erzeugen,BlowfishDer Algorithmus erfordert ein Salzformat:$2y$ + costParameter + 22Charakter Salz
$cost = 12; // Kosten berechnen,Je größer die Zahl ist, desto sicherer ist es, aber desto mehr ressourcenkonsumierende ist es.
$salt = sprintf('$2y$%02d$%s', $cost, substr(strtr(base64_encode(random_bytes(16)), '+', '.'), 0, 22));
// verwenden crypt() Passwort erstellen Hash
$hash = crypt($password, $salt);
echo "Passwort Hash als: " . $hash;
?>
Diese Hash -Zeichenfolge kann in der Datenbank gespeichert werden. Verwenden Sie bei der Überprüfung des Kennworts dieselbe Crypt () -Funktion und übergeben Sie den Hash in der Datenbank als Salzparameter, um automatisch den richtigen Salz und den richtigen Algorithmus zu verwenden.
Um das Passwort zu überprüfen, müssen Sie nur einmal Crypt () anrufen und die Ergebnisse vergleichen:
<?php
$input_password = 'user_password'; // Benutzereingabe
$stored_hash = '$2y$12$wW5O3K7uGp1oKpJ.HUJZEuWQNUkXpzB1I7N1h7qMm6E82JZXNpM4a'; // Hash in der Datenbank gespeichert
if (crypt($input_password, $stored_hash) === $stored_hash) {
echo "Passwortüberprüfung bestanden";
} else {
echo "Fehlerkennwort";
}
?>
Dies stellt sicher, dass der von unterschiedliche Salze generierte Hash, auch wenn das Passwort gleich ist, unterschiedlich ist, wodurch die Sicherheit verbessert wird.
Bewerten Sie die vorhandene Kennwortspeichermethode, um zu bestätigen, ob ein klarer Text oder eine schwache Verschlüsselung vorliegt.
Design -Migrationsstrategien wie das Erkennen des Kennwort -Hash -Formats, wenn sich der Benutzer anmeldet, und nach erfolgreicher Überprüfung des alten Formats können Sie Crypt () generieren, um einen neuen Hash zu generieren, um den alten Hash zu überschreiben.
Verwenden Sie beim Hinzufügen neuer Benutzer oder beim Zurücksetzen von Kennwörtern die neue Verschlüsselungsmethode direkt.
Stärken Sie die allgemeine Sicherheitskonfiguration des Systems , begrenzen Sie die Anzahl der Anmeldesversuche, verwenden Sie HTTPS und schützen Sie die Sicherheit der Datenübertragung.
Implementieren Sie die Salzgenerierungslogik nicht selbst. Es wird empfohlen, starke zufällige Funktionen wie Random_Bytes () zu verwenden.
Verwenden Sie keine kostengünstigen Algorithmen und setzen Sie die Kostenparameter vernünftig (wie die Kosten von Blowfish> = 12).
Vermeiden Sie es, Passwort -Hash direkt für die URL -Übertragung zu verwenden, und stellen Sie bei Bedarf unbedingt ordnungsgemäß codiert und geschützt.
Wenn das System es unterstützt, können Sie die nativen Funktionen von PHP und PHP -Funktionen (PHP 5.5+) kombinieren. Die zugrunde liegende Schicht verwendet auch Crypt (), um eine prägnantere und sichere Schnittstelle zu bieten.
<?php
$hash = password_hash('user_password', PASSWORD_BCRYPT);
if (password_verify('user_password', $hash)) {
echo "Passwortüberprüfung erfolgreich";
}
?>
Beschreibung der Crypt () -Funktion im offiziellen PHP -Handbuch: https://m66.net/manual/en/function.crypt.php