Heim  >  Artikel  >  Backend-Entwicklung  >  Wie führen PHP-Entwickler den Passwortschutz und die zugrunde liegende Implementierung der Passwortspeicherung und -überprüfung in Laravel durch?

Wie führen PHP-Entwickler den Passwortschutz und die zugrunde liegende Implementierung der Passwortspeicherung und -überprüfung in Laravel durch?

藏色散人
藏色散人nach vorne
2020-04-26 11:59:302736Durchsuche

Mit der Zunahme von Online-Angriffen wird die Sicherheit von Passwörtern immer wichtiger. Als Entwickler sind wir für die Verwaltung der Sicherheit, die Berechnung von Hashes und die Speicherung von Benutzerkennwörtern verantwortlich, unabhängig davon, ob es sich bei der Anwendung um ein einfaches Spiel oder um eine Sammlung streng geheimer Geschäftsdokumente handelt. PHP verfügt über einige integrierte Tools, die den Schutz von Passwörtern erleichtern. In diesem Abschnitt besprechen wir, wie diese Tools gemäß modernen Sicherheitsmaßnahmen verwendet werden.

Drei Prinzipien des Passwortschutzes

Wir dürfen das Passwort des Benutzers nicht kennen

Wir dürfen das Passwort des Benutzers nicht kennen Passwort. Es sollte auch keine Möglichkeit geben, Benutzerpasswörter abzurufen. Wenn die Datenbank Ihrer Anwendung gehackt wird, möchten Sie keine Klartext- oder entschlüsselbaren Passwörter in der Datenbank haben. Zu jedem Zeitpunkt gilt: Je weniger Sie wissen, desto sicherer sind Sie.

Beschränken Sie niemals das Passwort des Benutzers

Wenn Sie verlangen, dass das Passwort einem bestimmten Muster entspricht, bietet es Personen mit bösen Absichten tatsächlich eine Möglichkeit, die Anwendung anzugreifen. Wenn Sie Passwörter einschränken müssen, empfehle ich, sie nur auf eine Mindestlänge zu beschränken. Es ist auch eine gute Idee, häufig verwendete Passwörter oder auf der Grundlage eines Wörterbuchs erstellte Passwörter auf die schwarze Liste zu setzen.

Versenden Sie niemals ein Benutzerpasswort per E-Mail

Wenn Sie einem Benutzer ein Passwort per E-Mail senden, weiß der Benutzer drei Dinge: Sie kennen sein Passwort und Sie haben sein Passwort gespeichert Wenn Sie Ihr Passwort im Klartext oder auf entschlüsselbare Weise eingeben, müssen Sie sich keine Gedanken über den Versand von Passwörtern im Klartext über das Internet machen.

Wir sollten die URL zum Festlegen oder Ändern des Passworts in der E-Mail senden. Dieses Token wird normalerweise nur einmal beim Festlegen oder Ändern des Passworts verwendet. Normalerweise verwenden wir dieses Token als Parameter in der URL, um das Passwort festzulegen oder zu ändern. Wenn der Benutzer auf diese URL zugreift, überprüft die Anwendung, ob das Token gültig ist, und setzt den Vorgang fort , wird das Token ungültig und kann nicht wiederverwendet werden.

2. Passwortspeicherungsalgorithmus

Die beste Vorgehensweise bei der Passwortspeicherung besteht darin, den Hash-Wert des Passworts zu berechnen, anstatt das Passwort des Benutzers zu verschlüsseln. Verschlüsselung und Hashing sind nicht dasselbe. Verschlüsselte Daten können entschlüsselt werden, während Hashing ein Einwegalgorithmus ist. Die gehashten Daten können nicht auf den ursprünglichen Wert zurückgesetzt werden Gleiche Daten sind immer gleich.

Um das Passwort des Benutzers in der Datenbank zu speichern, müssen Sie zunächst den Hash-Wert des Passworts berechnen und dann den Hash-Wert des Passworts in der Datenbank speichern. Wenn ein Hacker in die Datenbank eindringt, wird er dies nur tun Sehen Sie bedeutungslose Passwort-Hashes, würde das Knacken viel Zeit und NSA-Ressourcen erfordern.

Es gibt viele Arten von Hashing-Algorithmen (z. B. MD5, SHA1, Bcrypt und Scrypt). Einige Algorithmen sind sehr schnell und werden zur Überprüfung der Datenintegrität verwendet. Verwenden Sie beim Generieren und Speichern von Passwörtern langsame, hochsichere Algorithmen.

Im Gegensatz zu md5 und SHA1 ist bcrypt der derzeit sicherste Algorithmus und fügt automatisch Salt hinzu, um potenzielle Rainbow-Table-Angriffe zu verhindern. Die Daten werden im Laufe der Zeit immer wieder verarbeitet, um einen besonders sicheren Hash zu generieren. Bei diesem Vorgang wird die Anzahl der Datenverarbeitungen als Arbeitsfaktor bezeichnet. Je höher der Wert des Arbeitsfaktors, desto länger dauert es, das Passwort zu knacken, und desto besser ist die Sicherheit. Der bcrypt-Algorithmus wird niemals veraltet sein. Wenn die Computerbetriebsgeschwindigkeit schneller wird, müssen wir nur den Wert des Arbeitsfaktors erhöhen.

3. Passwort-Hash-API

Durch die vorherige Einführung wissen wir, dass es bei der Verarbeitung von Benutzerpasswörtern viele Dinge zu beachten gibt Die Hash-API (http://php.net/manual/zh/book.password.php) bietet viele benutzerfreundliche Funktionen, die die Berechnung von Passwort-Hashes und die Überprüfung von Passwörtern erheblich vereinfachen Die API verwendet standardmäßig den bcrpt-Algorithmus.

Bei der Entwicklung von Webanwendungen gibt es zwei Orte, an denen die Passwort-Hashing-API verwendet wird: registrierte Benutzer und Benutzeranmeldung. Nehmen wir die von Laravel bereitgestellte Benutzerregistrierung und -anmeldung als Beispiel, um zu sehen, wie die PHP-Passwort-Hashing-API funktioniert funktioniert. Wie man diese beiden Operationen vereinfacht.

Hinweis: Die integrierten Benutzerregistrierungs- und Anmeldefunktionen des Laraval-Frameworks verwenden die PHP-Hash-API zum Speichern und Überprüfen von Passwörtern.

Registrierter Benutzer

Die Benutzerregistrierung wird in AuthController abgeschlossen und die Erstellung neuer Benutzer wird in der Erstellungsmethode des Controllers implementiert:

Wie führen PHP-Entwickler den Passwortschutz und die zugrunde liegende Implementierung der Passwortspeicherung und -überprüfung in Laravel durch?

Sie können sehen, dass die von Laravel bereitgestellte Hilfsfunktion bcrypt verwendet wird, um das vom Benutzer übermittelte Passwort zu hashen und in der Datenbank zu speichern. Die bcrypt-Funktion ist wie folgt definiert:

Wie führen PHP-Entwickler den Passwortschutz und die zugrunde liegende Implementierung der Passwortspeicherung und -überprüfung in Laravel durch?

Hier können wir sehen, dass die make-Methode auf der Dienstanbieterinstanz mit dem Alias ​​Hash tatsächlich aufgerufen wird, um das gehashte Passwort zu implementieren und das einzugeben HashServiceProvider. In der Register-Methode können wir sehen, dass die dem Hash entsprechende Klasse BcryptHasher ist, in der wir die Make-Methode finden:

Wie führen PHP-Entwickler den Passwortschutz und die zugrunde liegende Implementierung der Passwortspeicherung und -überprüfung in Laravel durch?

Der Kern besteht darin, die von PHP bereitgestellte Funktion „password_hash“ aufzurufen. Der erste Parameter ist der vom Benutzer eingegebene Passwortwert und der zweite Parameter ist der verwendete Hash-Algorithmus (siehe weitere Algorithmen: http: /). /php.net/manual/zh/password.constants.php), der dritte Parameter ist optional, einschließlich Salz- und Kostenoptionen, die jeweils die Interferenzzeichenfolge (Salz) und den zuvor erwähnten Arbeitsfaktor repräsentieren, Arbeit Der Faktor kann erhöht werden Wenn nicht, verwenden Sie Zufallssalz und Standardarbeitsfaktor (die Berechnung des Hash-Werts dauert im Allgemeinen 0,1 bis 0,5 Sekunden). Wenn die Berechnung fehlschlägt, wird eine Ausnahme ausgelöst.

Benutzeranmeldung

Nehmen Sie in Larval das Beispiel der Verwendung von Sitzungen als Wächter und eloquent als Anbieter in auth.php, um die Benutzeranmeldungsauthentifizierung zu implementieren (eigentlich sind dies die Standardeinstellungen). wie folgt), erfolgt die Anmeldeüberprüfung schließlich an die Methode „validateCredentials“ von EloquentUserProvider:

Wie führen PHP-Entwickler den Passwortschutz und die zugrunde liegende Implementierung der Passwortspeicherung und -überprüfung in Laravel durch?

$this->Die entsprechende Implementierung von Hasher ist auch die BcryptHasher-Klasse, überprüfen wir sie Prüfmethode:

Wie führen PHP-Entwickler den Passwortschutz und die zugrunde liegende Implementierung der Passwortspeicherung und -überprüfung in Laravel durch?

Der erste übergebene Parameter ist das vom Benutzer eingegebene Passwort und der zweite Parameter ist der Passwort-Hash-Wert, der bei der Registrierung des Benutzers gespeichert wurde Ist leer, wird direkt „false“ zurückgegeben, andernfalls wird die von PHP bereitgestellte Funktion „password_verify“ aufgerufen, um zu überprüfen, ob das Passwort (einfacher Text) und der Hash-Wert übereinstimmen.

Hash-Wert neu berechnen

Mit den oben genannten Schritten kann der Benutzer bereits eine Anmeldeauthentifizierung erreichen. Vor dem Anmelden müssen wir jedoch auch überprüfen, ob der Kennwort-Hash vorhanden ist Der Wert lautet „Ablauf“. Wenn er abgelaufen ist, muss der Passwort-Hash neu berechnet werden.

Warum müssen wir neu berechnen? Die Anwendung, die zu uns kam, wurde vor zwei Jahren erstellt und verwendete einen Arbeitsfaktor von 10. Jetzt verwendet sie 20, weil Computer schneller und Hacker schlauer sind. Der Passwort-Hash-Wert einiger Benutzer wird möglicherweise noch generiert, wenn der Arbeitsfaktor 10 beträgt. Zu diesem Zeitpunkt muss nach bestandener Anmeldeauthentifizierung die Funktion „password_needs_refresh“ verwendet werden, um zu prüfen, ob der vorhandene Hash-Wert im Benutzerdatensatz aktualisiert werden muss Diese Funktion kann sicherstellen, dass die angegebenen Passwort-Hashes mit den neuesten Hashing-Algorithmen erstellt werden. Wenn Sie den Hash-Wert des generierten Passworts wirklich neu berechnen müssen, verwenden Sie die Methode make, um einen neuen Hash-Wert zu generieren und das ursprüngliche Passwort in der Datenbank zu aktualisieren.

Diese Funktion wird derzeit nicht in Laraval verwendet, aber die entsprechende Funktion wurde in der BcryptHasher-Klasse bereitgestellt:

Wie führen PHP-Entwickler den Passwortschutz und die zugrunde liegende Implementierung der Passwortspeicherung und -überprüfung in Laravel durch?

Ursprüngliche Adresse: https: //xueyuanjun.com/post/4764

Das obige ist der detaillierte Inhalt vonWie führen PHP-Entwickler den Passwortschutz und die zugrunde liegende Implementierung der Passwortspeicherung und -überprüfung in Laravel durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:xueyuanjun.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen