In Content Management Systems (CMS) ist die Sicherheit von Benutzerdaten von entscheidender Bedeutung, insbesondere die Speicherung von Kennwörtern. Die mit PHP gelieferte Crypt () -Funktion ist eine klassische und sichere Verschlüsselungsmethode für Kennwort. Die Nutzungseinstellung kann die Sicherheit des Systems erheblich verbessern. In diesem Artikel wird eingehend erläutert, wie die Crypt () -Funktion in das CMS -System effektiv integriert werden kann, um die Sicherheit und Flexibilität des Kennwortspeichers zu gewährleisten.
Crypt () ist eine integrierte Verschlüsselungsfunktion in PHP und wird auf der Grundlage einer Vielzahl von Verschlüsselungsalgorithmen (wie DES, Blowfish, SHA-256, SHA-512 usw.) implementiert. Es erzeugt eine irreversible verschlüsselte Zeichenfolge, indem ein "Salzwert" -Parameter übergeben, der für den Kennwort -Hash -Speicher geeignet ist.
$hashed_password = crypt($password, $salt);
Der Salzwert ist der Schlüssel zur Gewährleistung der Verschlüsselungssicherheit und zur Vorbeugung von Regenbogentischangriffen.
crypt () unterstützt verschiedene Algorithmen in der Form wie folgt:
DES (nicht empfohlen, niedrige Sicherheit)
Blowfish (Identifier $ 2y $ , empfohlen für modernes Passwort Hashing)
SHA-256 (Kennung $ 5 $ )
SHA-512 (Kennung $ 6 $ )
Verwenden Sie zum Beispiel Blowfish:
$salt = '$2y$12$' . substr(bin2hex(random_bytes(16)), 0, 22);
$hash = crypt($password, $salt);
Hier repräsentiert $ 2y $ den Algorithmus, 12 ist der Kostenparameter (Anzahl der Iterationen, je größer der Wert, desto sicherer ist es nur zeitaufwändig), gefolgt von 22 Zeichen Salz.
function createPasswordHash($password) {
// Zufällige Salze erzeugen,verwenden Blowfish Algorithmus
$salt = '$2y$12$' . substr(strtr(base64_encode(random_bytes(16)), '+', '.'), 0, 22);
// Hash erzeugen
return crypt($password, $salt);
}
Wenn sich der Benutzer registriert, wird das Klartextkennwort über die oben genannten Funktionen generiert und in der Datenbank gespeichert.
function verifyPassword($password, $hashedPassword) {
// verwenden stored hash Vergleich des Salzes in der Kryptografie
return crypt($password, $hashedPassword) === $hashedPassword;
}
Nehmen Sie beim Anmeldung das in der Datenbank gespeicherte Hash -Kennwort heraus, verschlüsseln Sie sein Salz erneut und vergleichen Sie, ob es übereinstimmt.
Es wird empfohlen, Kennwortfelder mit einem String -Typ zu sein, wobei eine Länge von mindestens 60 Zeichen für den von Blowfish erzeugten Hash aufgenommen wird:
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
password_hash CHAR(60) NOT NULL,
...
);
Passen Sie kein Salz an : Verwenden Sie das von Crypt () generierte Salzformat oder verwenden Sie die Funktion password_hash () (PHP 5.5+), um die Vorgänge zu vereinfachen.
Kennwortaktualisierung : Betrachten Sie Benutzer, die schwächere Algorithmen für alte Passwörter verwenden, und regenerieren Sie stärker verschlüsselte Hashes, wenn Sie sich anmelden.
Kennwortstärke : Kombinieren Sie die Komplexität des Front-End- und Back-End-Zwangskennworts, um schwache Passwörter zu vermeiden.
Klartextspeicher vermeiden : Speichern Sie niemals Klartextkennwörter oder reversible verschlüsselte Passwörter.
Ausgehend von PHP 5.5 liefern password_hash () und passwart_verify () einfachere und sicherere Kennwortverwaltungsschnittstellen, und die zugrunde liegende Ebene basiert auch auf Crypt () . Es wird empfohlen, zuerst neue Projekte zu verwenden:
$hash = password_hash($password, PASSWORD_BCRYPT);
$isValid = password_verify($password, $hash);
Wenn Ihre CMS -Version älter ist und Sie Crypt () manuell verwenden müssen, ist die obige Methode immer noch eine sichere Lösung.