Ich habe einen grundlegenden Authentifizierungsprozess, der Zend_Auth_Adapter_DbTable
verwendet. Ich habe An- und Abmeldeaktionen auf meinem Authentifizierungs-Controller. Jetzt möchte ich eine Funktion erstellen, um vergessene Passwörter zurückzusetzen, indem ich automatisch ein Passwort erstelle, das neue Passwort speichere und ihnen eine E-Mail mit dem neu erzeugten Passwort zusende.
Was wäre der beste Prozess, um dies zu tun? Wie sollte ich ein neues Passwort erstellen? Hat das Zend Framework etwas, das das einfacher machen würde?
Ich habe auch gehört, dass ich eine E-Mail mit einem Link zu einer Kurzzeitseite gesendet habe, auf der sie ein neues Passwort festlegen können. Wie könnte dies mit dem Zend Framework gemacht werden?
Zend Framework hat keine Passwort generierende Klasse. Hier ist ein Artikel zur Verwendung des PEAR-Moduls Text_Password
, um ein Passwort zu generieren:
Ссылка
Es ist jedoch keine gute Sicherheitsvorkehrung, das Passwort in einer einfachen E-Mail zu senden. Stattdessen sollten Sie ihr Konto zurücksetzen, damit sie sich vorübergehend anmelden können, ohne ein Passwort zu vergeben (vorausgesetzt, Sie erhalten eine ablaufende URL in der E-Mail). Wenn sie sich einmal angemeldet haben, müssen sie ihr eigenes Passwort auf etwas sie
Hier ist ein Vorschlag aus dem Kopf für das Zend Framework:
AccountReset
mit den Feldern: reset_id
(GUID-Primärschlüssel), account_id
(Referenz auf Accounts.account_id
) und expiration
(Zeitstempel). AccountController::resetAction()
, d. h. in demselben Controller, den Sie zum Erstellen von Konten, zum Anmelden, zum Ändern von Passwörtern usw. verwenden. AccountReset
-Tabelle mit einer neuen GUID, einem Verweis auf das Benutzerkonto und einem expiration
30 Minuten oder so in der Zukunft ein. <
GUID >
" (wenn Sie schlau sind mit Routing-Regeln, können Sie diese URL verkürzen, aber behalten Sie die GUID drin). AccountController::resetAction()
die Anforderung empfängt, sucht sie in der Tabelle reset_id
nach ihrem Parameter AccountReset
. Wenn diese GUID vorhanden ist und die expiration
-Zeit nicht verstrichen ist, zeigen Sie dem Benutzer ein Formular zum Ändern seines Kennworts an (ohne dass er authentifiziert und angemeldet ist). resetAction()
eine Anfrage ohne GUID erhält oder die GUID nicht in der Datenbank vorhanden ist oder diese Zeile ihr expiration
übergeben hat, kann diese Aktion stattdessen dem Benutzer eine Schaltfläche zum Initiieren eines neuen geben Anfrage zurücksetzen und eine E-Mail mit einer neuen GUID senden Denken Sie daran, diesen Button zu einer POST-Anfrage zu machen! Da die GUID nur in einer E-Mail an die Adresse für diesen Benutzer kommuniziert wird, kann niemand sonst Zugang zum Ändern des Passworts erhalten. Selbst wenn die E-Mail des Benutzers abgefangen wird, gibt es nur eine begrenzte Zeit, bis die GUID diesen Zugriff gewährt.
Wenn Sie noch vorsichtiger sein möchten, können Sie die Client-IP-Adresse in der Tabelle AccountReset
notieren und das Kennwort innerhalb dieses 30-Minuten-Fensters von einem Client mit der gleichen IP-Adresse ändern.
Dies ist nur eine Ausnahme, und ich habe es nicht implementiert oder ausgewertet, um die Sicherheit zu gewährleisten. Wenn Sie für die Implementierung der Sicherheit verantwortlich sind, ist es Ihre Pflicht, sich über Sicherheitsprobleme zu informieren. Eine gut angesehene Ressource für PHP-Sicherheit ist Ссылка .
Tags und Links authentication zend-framework forgot-password