Aktueller Standort: Startseite> Neueste Artikel> So verwenden Sie password_verify, um zu überprüfen, ob das vom Benutzer eingegebene Passwort korrekt ist

So verwenden Sie password_verify, um zu überprüfen, ob das vom Benutzer eingegebene Passwort korrekt ist

gitbox 2025-05-29

Eine der empfohlenen und sichersten Möglichkeiten, um zu überprüfen, ob das Kennwort des Benutzers in PHP korrekt ist, besteht darin, die Funktion password_verify () zu verwenden. Diese Funktion wurde in PHP 5.5 eingeführt und ist so konzipiert, dass Kennwörter von password_hash () vergrößert werden. Passage_verify () ist sicherer als frühe Klartextvergleiche oder verwenden MD5/SHA1 -Hashing, da es BCrypt und andere leistungsstärkere Hashing -Algorithmen unterstützt.

Grundnutzung

Ein typisches Szenario, in dem password_verify () das vom Benutzer eingegebene Kennwort mit dem in der Datenbank gespeicherten Kennwort -Hash vergleichen soll, das bei der Anmeldung gespeichert ist. Hier ist ein grundlegendes Beispiel:

<Code> <? php // Das vom Benutzer $ inpassPassword = $ _post ['Passwort'] eingegebene Kennwort;

// Hash -Passwort in der Datenbank erhalten (z. B. von password_hash () bei der Registrierung generiert)
$ StoredHash = '$ 2y $ 10 $ nouis5kj7natutfkBy1VeUeVS1ZRWGFZKTFZ7VF6HG8NQZ5U2YFHY';

if (password_verify ($ inpassPassword, $ storedHash)) {
echo "Das Passwort ist korrekt, login zuzulassen";
} anders {
echo "Passwortfehler";
}
?>
</code>

Methode 1: Verwenden Sie in Kombination mit der Datenbank

In praktischen Anwendungen wird das Passworthashing im Allgemeinen in einer Datenbank gespeichert. Während der Überprüfung müssen Sie den entsprechenden Hash des Benutzers aus der Datenbank lesen und dann mit dem Kennwort des Benutzers vergleichen:

<code> <? php // Angenommen, der Benutzername und das Kennwort werden über $ userername = $ _post ['userername'] übergeben; $ password = $ _post ['Passwort'];

// Datenbankverbindung (Beispiel verwendet PDO)
$ pdo = new pdo ('MySQL: host = localhost; dbname = myapp', 'dbuser', 'dbpass');

// Benutzerkennworthash abfragen
$ stmt = $ pdo-> vorbereiten ("Password_hash von Benutzern auswählen, wo userername =?");
$ stmt-> execute ([$ userername]);
$ hash = $ stmt-> fetchcolumn ();

if ($ Hash && password_verify ($ password, $ hash)) {
echo "Anmeldung erfolgreich";
} anders {
echo "Fehler in Benutzername oder Passwort";
}
?>
</code>

Methode 2: automatisch abgelaufene Hash wieder aufbauen

Bei Verwendung von Password_verify () können Sie den alten Hash -Algorithmus nicht mehr empfohlen (z. B. die Parameter verfallen) automatisch den Passwort -Hash -Hash mit password_needs_rehash () :

<code> <? php $ options = ['cost' => 12]; if (password_verify ($ password, $ hash)) {if (password_needs_rehash ($ hash, password_default, $ option) {$ newash = password_hash ($ password, password_default, $ option); // Aktualisieren Sie den Hash des Benutzers in der Datenbank $ STMT = $ pdo-> vorbereiten ("Aktualisieren Sie Benutzer setze password_hash =? Wo userername =?"); $ stmt-> execute ([$ newash, $ userername]); } echo "erfolgreich anmelden, Passwort Hash wurde aktualisiert"; } else {echo "Kennwortfehler"; }?> </code>

Methode 3: Verwenden Sie die Schnittstelle, um die Überprüfungslogik zu verkapulieren

Für die Wartbarkeit des Projekts wird empfohlen, die Kennwortüberprüfungslogik in eine separate Methode oder Klasse zu integrieren, um die Kennwortverarbeitungsrichtlinien zentral zu verwalten. Zum Beispiel:

<Code> <? Php -Klasse Auth {public statische Funktion verifyPassWord ($ InputPassword, $ StoredHash): bool {return password_verify ($ inputPassword, $ StoredHash); }}?> </code>

Anrufmethode:

<Code> <? php if (auth :: verifyPassword ($ _ post ['password'], $ storedHash)) {echo "verabschiedet"; } else {echo "Überprüfung fehlgeschlagen"; }?> </code>

Dinge zu beachten

  • Lassen Sie das vom Benutzer vom Benutzer nicht manuell eingegeben und vergleichen Sie es dann mit der Datenbank. Der Salzwert- und Hashing -Algorithmus wird intern von Password_verify () behandelt.

  • Vermeiden Sie die Verwendung alter Hash -Funktionen wie MD5 () oder SHA1 () , die angesichts moderner Angriffsmethoden nicht mehr sicher sind.

  • Die Hash -Zeichenfolge ist irreversibel und kann nicht verwendet werden, um das ursprüngliche Passwort wiederherzustellen.

  • Der mit password_hash () generierte Hash ist jedes Mal anders, kann jedoch durch password_verify () überprüft werden.

Zusammenfassung

Die Verwendung von Password_verify () ist eine der wichtigsten Links bei der Implementierung der sicheren Benutzerauthentifizierung. Es verwendet nicht nur moderne Hashing -Algorithmen, sondern vereinfacht auch die Überprüfungslogik des Entwicklers und erleichtert das Passwort -Hashing -Upgrades. In den tatsächlichen Projekten wird empfohlen, ein solides Kennwortverifizierungssystem in Kombination mit Datenbankvorgängen, Kapselungslogik und automatischer Rekonstruktionsmechanismus zu erstellen.

Weitere Best Practices zu Password_verify () und Kennwortverarbeitung finden Sie in der offiziellen Dokumentation oder unter https://gitbox.net/docs/php-password-security .