Sicherheit ist immer eines der betroffenen Probleme für Entwickler beim Umgang mit Benutzerkennwörtern in PHP. Obwohl PHPs Passage_hash () eine bequeme und sichere Möglichkeit zum Speichern von Passwörtern bereitgestellt hat, wählen Entwickler in bestimmten Szenarien möglicherweise weiterhin für detailliertere Steuerung. In diesem Artikel wird vorgestellt, wie Sie sicherere Salzwerte generieren, indem Sie Random_Bytes () kombinieren, um die Sicherheit des Kennwortspeichers zu verbessern.
Salt ist ein Zufallsdaten, der vor und nach dem Passwort hinzugefügt wird und an Hashing -Operationen teilnimmt, um sicherzustellen, dass der von ihnen generierende Hash -Wert auch dann unterschiedlich ist, selbst wenn zwei Benutzer dasselbe Kennwort verwenden. Kein Salzwert oder die Verwendung von festem Salzwert macht das Passwort anfälliger für Regenbogentischangriffe und Wörterbuchangriffe .
Crypt () ist eine Funktion für das Passworthashing. Es unterstützt mehrere Hashing-Algorithmen wie DES , MD5 , SHA-256 , SHA-512 . Unter ihnen sind SHA-256 und SHA-512 derzeit die am meisten empfohlenen Optionen.
Ein Beispiel für Crypt () unter Verwendung des SHA-512-Algorithmus:
$password = 'examplePassword';
$salt = '$6$rounds=5000$usesomesillystringforsalt$';
$hash = crypt($password, $salt);
$ 6 $ hier bedeutet mit sha-512, runden = 5000 bedeutet 5000 Iterationen, und die folgende Zeichenfolge ist der Salzwert.
Im Vergleich zur Verwendung statischer Zeichenfolgen kann Random_Bytes () einen wirklich verschlüsselten, starken zufälligen Bytestrom erzeugen, der ideal für den Aufbau sicherer Salzwerte ist.
Hier ist ein vollständiges Beispiel, das zeigt, wie Sie Random_Bytes () und Crypt () kombinieren, um das Passwort sicher zu hassten:
function generateSalt($length = 16) {
// Generieren Sie zufällige Bytes der angegebenen Länge,Und zu konvertieren zu Base64,Entfernen Sie es erneut und können sich auswirken crypt() Charaktere von
$rawSalt = base64_encode(random_bytes($length));
// Klar '+'、'/' Und '=',Zu passen crypt() Erfordern
$cleanSalt = str_replace(['+', '/', '='], '', $rawSalt);
return substr($cleanSalt, 0, $length);
}
function hashPassword($password) {
$salt = generateSalt();
$fullSalt = '$6$rounds=10000$' . $salt . '$';
return crypt($password, $fullSalt);
}
function verifyPassword($password, $hash) {
return hash_equals($hash, crypt($password, $hash));
}
$userPassword = 'mySecret123';
$hashed = hashPassword($userPassword);
// Lagerung $hashed Gehen Sie zur Datenbank
// Bei Überprüfung der Anmeldung
$inputPassword = 'mySecret123';
if (verifyPassword($inputPassword, $hashed)) {
echo 'Richtiges Passwort';
} else {
echo 'Fehlerkennwort';
}
Salzwertlänge Steuerung : Crypt () hat Anforderungen für die Salzwertlänge, die normalerweise auf 16 Zeichen begrenzt ist, und der überschüssige Teil wird abgeschnitten.
NICHT SALT -Werte wiederverwenden : Neue zufällige Salzwerte sollten jedes Mal verwendet werden, wenn ein Passwort -Hash generiert wird.
Erstellen Sie keine Hash -Strukturen manuell : Obwohl Sie Salzstrukturen (z. B. $ 6 $ Runden = 10000 $ Salt $ ) manuell spleißen können, wird empfohlen, offizielle Methoden (wie password_hash () ) zu verwenden, wann immer möglich, um potenzielle Fehler zu vermeiden.
Upgrade -Vorschläge : Wenn es sich nicht um eine spezifische Anforderung handelt, wird empfohlen , Passage_hash () und passwart_verify () zu verwenden, die automatisch Salzwerte und Algorithmusauswahl intern behandeln.
Durch Kombinieren von Random_Bytes () und Crypt () können Entwickler jeden Link der Kennwortverschlüsselung manuell steuern, die Zufälligkeit und Unvorhersehbarkeit des Kennwortspeichers verbessern und so mehr Angriffsszenarien widerstehen. Insbesondere in Systemen mit hohen Sicherheitsanforderungen bietet diese Methode eine höhere Garantie als herkömmliche statische Salzwerte.
Wenn Sie die Sicherheit weiter stärken müssen, können Sie auch in Betracht ziehen, die Hashing -Ergebnisse mit anderen Benutzeridentifikatoren (wie Mailbox, Benutzername usw.) zu kombinieren oder eine modernere Verschlüsselungsbibliothek wie Natrium zu verwenden. Die Prämisse ist jedoch immer: Die Verwendung von zuverlässigen Zufallssalzwerten ist der erste Schritt in der Kennwortsicherheit.
Stellen Sie in der tatsächlichen Bereitstellung sicher, dass HTTPS auf der gesamten Website aktiviert ist und Datenbankberechtigungen und Sicherungsrichtlinien ordnungsgemäß verwalten, um Klartextkennwörter und schwache Verschlüsselungsmethoden zu vermeiden, die zu Schwachstellen in der Systemsicherheit werden.