Die beste Art, Code für "Passwort vergessen" zu machen

8

net Website, ich möchte vergessen Passwort implementieren. Ich verwende folgende Schritte

  1. Formular mit Eingabefeld für Login-ID und E-Mail-ID und CAPTCHA
  2. wenn Benutzer Details eingeben und abschicken, wird im Backend nach der Validierung ein neues Passwort generiert und das alte Passwort in der Datenbank ersetzt.
  3. Neues Passwort wird an den Benutzer per E-Mail gesendet.

Bitte helfen Sie mir, ob ich richtig mache oder nicht?

Gibt es einen anderen sicheren Mechanismus für denselben?

[BEARBEITEN] Danke, ich habe deine Antwort erhalten. Wirklich, das ist ein sicherer Mechanismus. Aber hier habe ich wenig Zweifel

  1. Welche Nachricht sollte ich dem Benutzer zeigen, wenn er loginId und die E-Mail-Adresse auf der Seite für vergessene Passwörter eingibt?
  2. Ob die Nachricht für einen gültigen Benutzer und für einen mickrigen Benutzer gleich ist?
  3. Vorteil der Verwendung von CSRF-Token? Irgendeine Hilfe / Verbindung
  4. Wenn der Benutzer auf den Link klickt, was soll ich tun? weil, wie ich denke, Benutzer sollte sich automatisch in ihr Konto anmelden -dann danach habe ich 2 Wahl (zuerst) neues Passwort automatisch an den Benutzer senden (zweite) neues Formular wird dem Benutzer angezeigt wo Benutzer altes Passwort und neues Passwort zweimal eingeben? li>

Bitte helfen?

    
Hemant Kothiyal 02.01.2010, 05:11
quelle

4 Antworten

12

Ich kann sehen, warum Sie eine CAPTCHA wollen, aber ich würde einen anderen Ansatz wählen.

  1. Wenn ein Zurücksetzen des Kennworts angefordert wird, prüfen Sie, ob innerhalb der letzten X Minuten ein Zurücksetzen für dieses Konto angefordert wurde. Wenn ein Passwort bereits angefordert wurde, ignorieren Sie die Zurücksetzungsanforderung.
  2. Überprüfen Sie die IP, die das Zurücksetzen des Kennworts anfordert. Wenn diese IP-Adresse in den letzten Y Minuten ein Zurücksetzen des Kennworts angefordert hat, ignorieren Sie die Anforderung.
  3. Wenn die Checks in 1 & amp; 2 Pass prüfen, ob das Konto existiert. Wenn es die Anfrage nicht ignoriert.
  4. Wenn wir so weit gekommen sind, generieren Sie ein einmaliges Token, das in Z Minuten abläuft, und eine URL zum Zurücksetzen des Passworts, die dieses Token umfasst. E-Mail an die registrierte E-Mail-Adresse. Wenn die URL geladen ist, fordern Sie ein neues Passwort an und setzen Sie es zurück.

Für diejenigen, die glauben, dass Sie dem Nutzer sagen sollten, wo die E-Mail verschwunden ist, stimme ich nicht zu. Dies ist ein "Informationsleck", auch wenn Sie es auf den Domainnamen beschränken. Zum Beispiel, ich habe mich bei JeffAtwoodEatsBabies.com als Blowdart registriert. Wenn Jeff ein Passwort-Reset für mich angefordert hätte und du die Registrierungs-Domain angezeigt hättest, würde er idunno.org sehen. Dies ist meine persönliche Domäne und somit würde Jeff wissen, dass der Blowdart-Benutzer tatsächlich ich bin. Das ist ein schlechtes Ding. Ich sollte mich nicht mit Hotmail oder Google Mail oder so registrieren müssen, um mich vor Ihrem Code zu schützen, der eine E-Mail-Domain für alle anzeigt.

Außerdem sollten Sie keine Fehlermeldungen anzeigen. Egal, was passiert, ein Benutzername ist nicht registriert oder es wurden zu viele Anfragen gemacht oder der Himmel ist gefallen. Sie sollten dem Benutzer mitteilen, dass das Passwort zurückgesetzt wurde. Das Informieren eines Benutzers, dass ein Konto nicht existiert, führt zu mehr Informationslecks.

Eine letzte Sache, die Sie tun können, ist ein CSRF-Token auf der Seite zum Zurücksetzen der Anfrage hinzuzufügen, damit es nicht von anderen Websites aus gesteuert werden kann.

Folge

Also, um Ihre weiteren Fragen zu beantworten.

  1. Welche Nachricht du zeigst, bleibt dir überlassen. "Anweisungen zum Zurücksetzen Ihres Passworts wurden per E-Mail an die registrierte E-Mail-Adresse für dieses Konto gesendet", ist eine Idee, aber es liegt wirklich an Ihrem Publikum.
  2. Bereits oben angesprochen.
  3. Wikipedia ist ein guter Startpunkt . Wie Sie es tun, hängt von Ihrer Plattform ab und ist eine komplette andere Frage! Für ASP.NET können Sie sich mein Codeplex-Projekt ansehen, Ссылка oder schauen Sie sich ViewStateUserKey .
  4. Wenn der Link angeklickt wird, würde ich zuerst das Token in der URL gegen den Benutzernamen validieren, auf den es angewendet wird, dann würde ich entweder zulassen, dass der Benutzer ein neues Passwort eingibt, oder ein neues erzeugen und es mailen. Sie können nicht nach dem alten fragen, da der ganze Punkt der Benutzer es vergessen hat!
blowdart 02.01.2010, 05:54
quelle
6

Es gibt viele Möglichkeiten, wie dies implementiert wurde. Wie Sie bereits gesagt haben, ist das Generieren eines neuen Passworts und das Senden an die registrierte E-Mail-Adresse eine Methode. Ich würde jedoch nicht vorschlagen, dass Sie diesen Weg gehen, da mein Passwort jedes Mal zurückgesetzt wird, wenn jemand versucht hat, mein Passwort zu erraten.

Stattdessen ist das Beste, was ich bis jetzt gesehen habe, einfach die registrierte E-Mail mit einem Link zu mailen, der einen Passwort-Reset-Prozess startet. Sie können den Benutzer sogar wissen lassen, welche E-Mail-Adresse überprüft werden soll, indem eine maskierte Version seiner E-Mail-Adresse angezeigt wird, die bei der Registrierung verwendet wird:

  

Eine E-Mail wurde an ******** @hotmail.com gesendet. Bitte überprüfen Sie Ihren Posteingang, um fortzufahren.

Achten Sie darauf, diejenigen von uns in Betracht zu ziehen, die vielleicht vergessen haben, mit welcher E-Mail-Adresse sie registriert wurden - normalerweise sind einige Sicherheitsfragen eine gute Möglichkeit, diese Informationen verfügbar zu machen.

    
Sampson 02.01.2010 05:16
quelle
4

Das habe ich kürzlich gemacht. Wenn der Benutzer seinen Benutzernamen oder seine E-Mail-Adresse eingibt, generieren wir ein eindeutiges Token und senden es als Teil eines Links an sie. Nach Erhalt dieser E-Mail klicken sie auf den Link und werden automatisch angemeldet. Sie werden zum Bildschirm "Mein Konto" weitergeleitet und aufgefordert, ihr Passwort zurückzusetzen.

Natürlich hängt dies zu 100% von der Sicherheit des E-Mail-Clients ab, aber aus Usability-Sicht ist es schwer zu übertreffen.

    
gahooa 02.01.2010 05:22
quelle
0

Sie sollten die Antwort auf die Frage überprüfen: Kann irgendjemand Referenzen zur Implementierung von Password-Reset-Mechanismen für Webanwendungen bereitstellen? von DW zu security.stackexchange.

Es ist die vollständigste Antwort, die ich zu diesem Thema gefunden habe. Ich empfehle Ihnen auch, diesen Artikel zu lesen: Alles, was Sie schon immer wissen wollten Erstellen einer sicheren Kennwortzurücksetzungsfunktion

    
Techbrunch 12.02.2013 16:31
quelle

Tags und Links