Erläutert, wie Sie mit der Hash-Facade von Laravel Passwörter sicher hashen und prüfen. Beschreibt die Konfiguration und Nutzung der Algorithmen bcrypt und Argon2.
Beim Hashing werden Klartextdaten wie ein Passwort per Einwegtransformation in einen String fester Länge überführt.
Aus dem gleichen Input entsteht immer der gleiche Hash-Wert, aber der Klartext lässt sich aus dem Hash nicht wiederherstellen.Die Facade Hash von Laravel unterstützt zur sicheren Ablage von Passwörtern die Algorithmen bcrypt und Argon2.
Rechenaufwand über den Arbeitsfaktor (Rounds) einstellbar. Standard.
Übliche Webanwendungen
argon2i
Speicher, Zeit und Thread-Anzahl einstellbar. Robust gegen Seitenkanalangriffe.
Anwendungsfälle mit hohen Sicherheitsanforderungen
argon2id
Hybrid aus argon2i und argon2d. Von der PHC empfohlen.
Bei neuen Projekten mit Argon2
Der Arbeitsfaktor (Work Factor) von bcrypt steuert, wie lange die Hash-Berechnung dauert. Je langsamer der Hash, desto resistenter ist das System gegen Brute-Force-Angriffe. Wenn Hardware schneller wird, sollten Sie den Arbeitsfaktor erhöhen, um das Sicherheitsniveau zu halten.
Über die Option rounds regeln Sie den Rechenaufwand des Hashings. Höhere Werte sind sicherer, benötigen aber mehr Zeit.
Der Standard (12) ist für die meisten Anwendungen angemessen.
Mit Hash::check() prüfen Sie, ob ein Klartext-Passwort dem gespeicherten Hash entspricht.
Ein typisches Einsatzgebiet ist die Login-Logik.
use Illuminate\Support\Facades\Hash;if (Hash::check($request->password, $user->password)) { // Passwörter stimmen überein} else { // Passwörter stimmen nicht überein}
Verwenden Sie Auth::attempt(), wird diese Prüfung automatisch durchgeführt – ein direkter Aufruf ist dann nicht nötig.
Hash::check() ist praktisch, wenn Sie das aktuelle Passwort manuell verifizieren möchten.
// Aktuelles Passwort im Passwort-Änderungsformular prüfenif (! Hash::check($request->current_password, $request->user()->password)) { return back()->withErrors(['current_password' => 'Das aktuelle Passwort ist nicht korrekt.']);}
Mit Hash::needsRehash() prüfen Sie, ob ein bestehender Hash mit einem anderen Arbeitsfaktor erzeugt wurde als aktuell konfiguriert.
Nützlich, um nach einer Änderung des Arbeitsfaktors bestehende Hashes auf die neue Konfiguration umzustellen.
use Illuminate\Support\Facades\Hash;if (Hash::needsRehash($user->password)) { $user->update([ 'password' => Hash::make($plainTextPassword), ]);}
Ein Beispiel für Rehash bei erfolgreichem Login:
// Beim Login neu hashenif (Auth::attempt($credentials)) { if (Hash::needsRehash(Auth::user()->password)) { Auth::user()->update([ 'password' => Hash::make($credentials['password']), ]); } return redirect()->intended('/dashboard');}
Passen Sie den Arbeitsfaktor bei Hardware-Fortschritten regelmäßig an, um Ihr Sicherheitsniveau zu erhalten. Mit needsRehash() können Sie beim natürlichen Login die Passwörter im Vorbeigehen aktualisieren.
Standardmäßig prüft Hash::check(), ob der Hash mit dem aktuell konfigurierten Algorithmus erzeugt wurde.
Bei einem abweichenden Algorithmus wird eine RuntimeException ausgelöst.Damit lassen sich Angriffe durch das Vertauschen des Hash-Algorithmus verhindern.Wenn Sie – etwa während einer Migration – mehrere Algorithmen gleichzeitig unterstützen müssen, können Sie diese Prüfung mit HASH_VERIFY=false deaktivieren.
# .envHASH_VERIFY=false
Mit HASH_VERIFY=false schalten Sie die Algorithmusprüfung ab. Nutzen Sie das nur während einer Migration und setzen Sie den Wert danach auf true (Standard) zurück.