it-swarm.com.de

Best Practices für die Wiederherstellung von Passwörtern implementieren

Ich möchte die Kennwortwiederherstellung in meiner Webanwendung implementieren.

Ich möchte es vermeiden, geheime Fragen zu verwenden.

Ich könnte das Passwort einfach per E-Mail senden, aber ich denke, es wäre riskant.

Vielleicht könnte ich ein neues temporäres Zufallskennwort generieren und es per E-Mail senden, aber ich denke, es ist genauso riskant wie der obige Punkt.

Kann ich eine URL per E-Mail senden, zum Beispiel http://example.com/token=xxxx Dabei ist xxxx ein zufälliges Token, das dem Benutzer zugeordnet ist. Wenn der Benutzer zu dieser URL navigiert, kann er das Passwort zurücksetzen.

59
Enrique

Speichern Sie zunächst not eine Klartextkopie des Benutzerkennworts oder sogar eine verschlüsselte Version. Sie möchten immer nur eine hashed - Kopie des Benutzerkennworts aufbewahren.

Was Wiederherstellungslösungen angeht, finde ich, dass der Wiederherstellungslink zum Ändern des Kennworts des Benutzers die beste Lösung ist. Es wird wahrscheinlich für den Benutzer etwas bequemer sein, während es aus Sicherheitsgründen weitgehend das gleiche ist wie das Senden eines neuen zufälligen Passworts, das nach dem nächsten Login geändert werden muss. Ich empfehle dennoch, die Wiederherstellungs-URL nach einer angemessen kurzen Zeit ablaufen zu lassen und nur einmal zu verwenden.

48
Kitsune

Als ich in der Luftwaffe war, lautete die Sicherheitsregel: Wenn Sie Kennwörter festlegen oder zurücksetzen, senden Sie die Benutzer-ID und das Kennwort nicht in derselben E-Mail. Wenn also jemand E-Mails abfängt, die nach Passwörtern suchen, muss er BEIDE E-Mails erfolgreich abfangen und in der Lage sein, sie zu verbinden, um die Sicherheit zu verletzen.

Ich habe viele Websites gesehen, die die "zum URL zurücksetzen, um Ihr Passwort zurückzusetzen" verwenden. Vielleicht fehlt mir etwas - ich behaupte nicht, ein Sicherheitsexperte zu sein -, aber ich sehe nicht, dass dies sicherer ist, als nur ein neues temporäres Kennwort zu erfinden und es zu senden. Wenn ein Hacker die E-Mail abfängt, warum kann er nicht zu diesem Link gehen und das neue Kennwort sowie den legitimen Benutzer sehen? Es sieht für mich nach zusätzlicher Anstrengung für den Benutzer ohne Sicherheitsgewinn aus.

Glückwunsch, dass Sie KEINE Sicherheitsfragen verwenden. Die Logik dieses Geräts entgeht mir. Seit Beginn der Computersicherheit sagen wir den Leuten: "Machen Sie NICHT ein Passwort, das Informationen über sich selbst enthält, die ein Hacker entdecken oder erraten könnte, wie der Name Ihrer High School oder Ihre Lieblingsfarbe. Ein Hacker könnte dies tun Um den Namen Ihrer High School nachzuschlagen, oder selbst wenn sie Sie nicht kennen oder etwas über Sie wissen, wenn Sie immer noch in der Nähe Ihres Schulgeländes wohnen, können sie es versuchen, indem Sie lokale Schulen ausprobieren, bis sie es schlagen eine kleine Anzahl von möglichen Lieblingsfarben, so dass ein Hacker das erraten könnte. Stattdessen sollte ein Passwort eine sinnlose Kombination aus Buchstaben, Ziffern und Satzzeichen sein. " Aber jetzt sagen wir ihnen auch: "Aber! Wenn Sie Schwierigkeiten haben, sich an diese sinnlose Kombination von Buchstaben, Ziffern und Satzzeichen zu erinnern, kein Problem! Nehmen Sie sich einige Informationen über sich, an die Sie sich leicht erinnern können - wie der Name Ihrer High School oder Ihre Lieblingsfarbe - und Sie können diese als Antwort auf eine "Sicherheitsfrage" verwenden, dh als alternatives Passwort. "

Sicherheitsfragen machen es dem Hacker sogar noch leichter, als wenn Sie zunächst ein falsches Passwort gewählt hätten. Zumindest wenn Sie gerade eine persönliche Information für Ihr Passwort verwendet haben, würde ein Hacker nicht unbedingt wissen, welche persönlichen Informationen Sie verwendet haben. Haben Sie den Namen Ihres Hundes verwendet? Dein Geburtstag? Dein Lieblings-Eisgeschmack? Er müsste alle probieren. Bei Sicherheitsfragen teilen wir dem Hacker jedoch genau mit, welche persönlichen Informationen Sie als Kennwort verwendet haben.

Anstatt Sicherheitsfragen zu verwenden, sagen wir: "Wenn Sie Ihr Passwort vergessen haben, wird es am unteren Rand des Bildschirms angezeigt. Wenn Sie versuchen, sich bei einem anderen Konto zu hacken, ist dies absolut verboten Herunterscrollen." Es wäre nur etwas weniger sicher.

Wenn Sie sich fragen, ob Websites mich nach der Stadt, in der ich geboren wurde, oder nach dem Hersteller meines ersten Autos fragen, gebe ich keine konkrete Antwort auf die Frage. Ich gebe ein sinnloses Passwort.

</ rant>

83
Jay

Schwer zu sagen, was Sie sollten tun, da so ziemlich jede Lösung für dieses Problem die Sicherheit schwächen wird. Es sei denn, Sie möchten möglicherweise das Senden einer SMS, die Überprüfung von Rückrufen, die Generierung von Einmalkennwörtern oder andere derartige Schemata untersuchen, bei denen die Kennwortwiederherstellung auf einem anderen Medium durchgeführt wird.

Was Sie jedoch nicht tun sollten:

  • Senden Sie das Passwort - denn Sie haben es ja, wie bereits erwähnt, nicht.

  • Generieren Sie ein neues temporäres Passwort - dies ist nicht nur so unsicher wie das Senden des Passworts, sondern führt auch zur Möglichkeit eines Denial-of-Service-Angriffs. Ich kann auf die Website gehen, mich als Sie ausgeben, ein neues Passwort anfordern und mich dann (wenn Sie Ihre E-Mail-Adresse nicht überprüft haben) nicht anmelden, weiß nicht warum und muss ein neues Passwort anfordern. .

Das Token ist wahrscheinlich der richtige Weg. Durch den Empfang wird eine Anforderung eines vergessenen Passworts benachrichtigt, es werden jedoch keine Maßnahmen ergriffen, es sei denn, Sie bestätigen dies. Sie würden es auch zu einem einmaligen Token mit einer relativ kurzen Ablaufzeit machen, um das Risiko zu begrenzen.

Natürlich hängt vieles von der Anwendung ab. Offensichtlich ist der Schutz von finanziellen und anderen vertraulichen Informationen wichtiger, als zu verhindern, dass Ihr Konto auf mytwitteringfacetube.com gehackt wird, denn wenn jemand die Identität einer Person auf einer Website eines sozialen Netzwerks stehlen möchte, kann er einfach sein eigenes Konto eröffnen und sich mit Diebstahl tarnen Informationen trotzdem.

20
Duncan

Natürlich können Sie das Originalkennwort nicht per E-Mail senden, da Sie es nicht speichern (oder?). Das Senden eines temporären Kennworts (das geändert werden muss, da es nur für eine Anmeldung funktioniert) und ein Link zum Zurücksetzen des Kennworts sind aus Sicherheitsgründen gleichwertig.

10

Ich verstehe die Einstellung zur geheimen Fragemethode nicht. Es ist nicht so, dass ich mein Passwort "BlueHouse" und dann meine Sicherheitsfrage "Was sind Ihre zwei Lieblingssachen?" und die Antwort "Blue and Houses". Die Sicherheitsfrage ist nicht der magische Schlüssel, um das eigentliche Passwort zu erhalten. Normalerweise wird ein neues Passwort an die E-Mail-Adresse gesendet, die in der Datei gespeichert ist. Ich weiß nicht, wie Sie das sonst noch machen, aber es hört sich an, als würden Sie eines von zwei Dingen tun.

1) Der Benutzer klickt auf die Schaltfläche "Ich habe mein Passwort vergessen" und das neue Passwort wird an den Benutzer gesendet.

2) Der Benutzer klickt auf die Schaltfläche "Ich habe mein Passwort vergessen" und muss dann eine Sicherheitsfrage beantworten, bevor er das neue Passwort an die angegebene Adresse per E-Mail erhält.

Scheint mir, dass Option Nummer 2 sicherer ist.

Warum ist das Versenden eines Tokens sicherer als das Senden des Passworts? Wenn ein E-Mail-Konto gehackt wurde, wurde es gehackt. Es ist egal, ob es einen Link zum Zurücksetzen des Passworts, eines Tokens oder eines neuen Passworts gibt. Vergessen Sie nicht, dass die meisten Websites nicht sagen "Das neue Passwort wurde an die folgende E-Mail-Adresse gesendet, in die Sie sich einhacken können". Ein Hacker muss die E-Mail-Adresse erraten, die gehackt werden muss.

5
Andy Casey

Ich stimme Andy zu. Sind Sicherheitsfragen normalerweise nicht unabhängig vom Passwort? (meine sind) Bedeutet, dass sie eine Frage und eine Antwort haben und nicht mit dem Passwort zusammenhängen. Es scheint, als würde dies verwendet, um falsche Kennwortrücksetzanfragen zu verhindern, und hat tatsächlich eine Verwendung.

Stellen Sie sich vor, jemand könnte zum Dienstprogramm "Passwort vergessen" einer Site gehen und eine E-Mail-Adresse eingeben - oder nur eine Person, die sie ärgern möchten. Wenn das Passwort zu diesem Zeitpunkt zurückgesetzt wird, müssen die Personen, die zu diesen E-Mail-Adressen gehören, in ihrer E-Mail das Zurücksetzen des Passworts feststellen und sich bei ihrem nächsten Besuch mit dem Reset-Passwort auf der Website anmelden. Mit der Sicherheitsfrage ist dies für jemanden nicht so einfach.

Ich sehe, dass Amazon einen Link an die angegebene E-Mail sendet. Sie müssen außerdem ein Captcha eingeben, um DOS-Angriffe zu verhindern. Da es sich um einen Link handelt, kann ich mir vorstellen, dass sie das Passwort nicht sofort zurückgesetzt haben und es würde zurückgesetzt, sobald der Benutzer auf den Link klickt. Bei dem oben genannten Szenario würde der Benutzer nur die E-Mail sehen und feststellen, dass dies "Nein, habe ich nicht getan" und sich darum kümmern, dass er sein Passwort nicht unnötig ändern muss. Eine Sicherheitsfrage hätte möglicherweise den Versuch am Anfang und den legitimen Benutzer daran gehindert, die E-Mail überhaupt zu erhalten.

Hier ist ein Whitepaper: http://appsecnotes.blogspot.com/2010/09/latest-forgot-password-best-practices.html

Dieser empfiehlt tatsächlich geheime Fragen als einen wesentlichen Teil des Authentifizierungsprozesses. Wenn Sie einen Authentifizierungscode per E-Mail senden und ihn anfordern, können Sie ihn nur als Zusatz-Layer hinzufügen.

5
mikato

Es hängt wirklich davon ab, wie viel Sicherheit Sie haben möchten. Das eine Ende des Extrems ist ein Vorgang zum Zurücksetzen von Kennwörtern, bei dem Sie kontaktiert und bestätigt werden, dass Sie derjenige sind, von dem Sie behaupten, dass Sie z. via id, weil Ihre Mailbox auch gefährdet sein könnte. Da die Leute überall das gleiche Passwort verwenden, ist dies sehr wahrscheinlich. Auf der anderen Seite gibt es den Standardansatz, bei dem einfach eine E-Mail mit einem zufälligen neuen Passwort versendet wird. 

"Geheime" Fragen und Antworten sind nur eine weitere Form von Benutzernamen und Passwörtern, mit dem fatalen Fehler, dass sie in der Regel unglaublich leicht zu erraten sind. 

Was den Token betrifft, glaube ich nicht, dass dies einen großen Unterschied in der Sicherheit insgesamt darstellt. Ob Sie ein Token versenden, mit dem ein Benutzer das Kennwort ändern kann, oder ob Sie ein zufälliges Kennwort sofort versenden, macht keinen großen Unterschied. 

Stellen Sie nur sicher, dass das Token nur einmal und vorzugsweise nur in einer begrenzten Zeitspanne verwendet werden kann, z. + 24h nach Aufforderung. 

Und wie bereits in früheren Antworten erwähnt wurde, speichern Sie NIEMALS einfache Kennwörter. Hash sie Fügen Sie vorzugsweise Salz hinzu.

4
ilikeorangutans

So habe ich es gelöst:

Ich fügte retrieve_token- und retrieve_expiration-Felder zu meiner Benutzertabelle hinzu.

Der Benutzer fordert ein Zurücksetzen des Kennworts an, indem er seine E-Mail-Adresse angibt und das Captcha ausfüllt. Ein zufällig gehashter Wert wird für ihr retrieve_token-Feld generiert, d. H. md5($user_id.time()), während retrieve_expiration auf eine Datumszeit gesetzt wird, die in den nächsten 45 Minuten abläuft. Die E-Mail wird mit einem Link an den Benutzer gesendet:

https://example.com/reset-password?retrieve_token=912ec803b2ce49e4a541068d495ab570 

SSL sollte obligatorisch sein, wenn eine Authentifizierung erforderlich ist. Sie können auch eine Tabelle zum Protokollieren von Rücksetzanforderungen hinzufügen, in der E-Mail und die IP-Adresse gespeichert werden. Es hilft, mögliche Brute-Angriffe aufzuspüren, und Sie können die IP des Angreifers bei Bedarf blockieren. 

Sie könnten eine Sicherheitsfrage für das Anfordern des Zurücksetzens von Kennwörtern implementieren, aber ich glaube, das Captcha würde ausreichen, um jemanden davon abzuhalten, die Anfrage mehrfach zu wiederholen.

3
bazzaretta

@Jay. Der Grund, warum Sie zu einer URL wechseln, um Ihr Kennwort zurückzusetzen, anstatt nur jemandem ein neues temporäres Kennwort zu senden, ist mehr als nur die Sicherheit. Ohne eine URL mit einem Token könnte eine Person das Kennwort einer anderen Person zurücksetzen. Sie müssen nicht auf die E-Mail zugreifen. Wenn jemand einen Knochen mit jemandem auswählen konnte, könnte er einfach ein neues Passwort zurücksetzen. Das arme Ziel muss sich dann immer wieder anmelden und das Passwort ändern.

Durch das Senden eines Tokens ändert sich das Kennwort des Benutzers erst, wenn er sich mit ihm anmeldet und bestätigt. Der Spam von zurückgesetzten E-Mails kann ignoriert werden. Tokens sind genauso einfach (wenn nicht einfacher) mithilfe einer GUID als neues Kennwort zu generieren. Dies ist für den Entwickler nicht besonders umständlich.

Da die GUID eindeutig ist (ein generiertes Kennwort ist möglicherweise nicht vorhanden), kann ein Token an einen Benutzernamen gebunden werden. Wenn der falsche Benutzername in der URL angegeben ist, kann das Token abgebrochen werden (d. H., Wenn eine andere Person es initiiert und von einer Person abgefangen wird. Wenn der Benutzername nicht mit der E-Mail übereinstimmt).

2
Devon

@Jay. Die richtige Verwendung von Sicherheitsfragen besteht darin, eine E-Mail zum Zurücksetzen des Passworts einzuleiten, nicht um das Passwort tatsächlich zurückzusetzen. Ohne einen Mechanismus wie eine Sicherheitsfrage könnte man ein Passwort zurücksetzen. Das Senden einer Reset-E-Mail könnte an eine E-Mail gesendet werden, die möglicherweise nicht mehr dem ursprünglichen Besitzer gehört. Das ist nicht selten. Wenn Mitarbeiter beispielsweise ein Unternehmen verlassen, werden diese Mails häufig an einen anderen Mitarbeiter weitergeleitet. Eine Sicherheitsfrage fügt diesem Szenario eine geringe Behinderung hinzu. Außerdem werden Probleme reduziert, bei denen eine Person das falsche Passwort für das Zurücksetzen des Kennworts einleitet, was dazu führt, dass ein unbeabsichtigtes Spatenzeichen unbeabsichtigt aufgedeckt wird. Sicherheitsfragen sind wirklich nicht wirklich sicher, sie sollen lediglich solche Szenarien reduzieren. Jeder, der eine Sicherheitsabfrage verwendet, um das Kennwort tatsächlich zurückzusetzen, tut dies falsch. 

1
Devon

Hier ist ein Beispiel, wie jemand es mit Node.js gemacht hat. Generell generieren Sie ein zufälliges Token, eine Ablaufzeit, senden den Link mit dem angefügten Token und haben eine reset/:token-Route, die sicherstellt, dass ein Benutzer mit diesem Token existiert (das ebenfalls nicht abgelaufen ist ) und, falls dies der Fall ist, auf eine Seite zum Zurücksetzen des Passworts umleiten. 

http://sahatyalkabov.com/how-to-implement-password-reset-in-nodejs/

0
Leahcim

In Bezug auf Sicherheitsfrage/Antwort. Als Nutzer von Websites verwende ich sie nicht persönlich (ich gebe Müll ein). Sie sind aber sicherlich nicht nutzlos oder sinnlos, wie manche hier sagen. 

Beachten Sie folgende Situation: Ein Benutzer Ihrer Website hat seinen Schreibtisch verlassen, um zu Mittag zu essen, und hat seine Workstation nicht gesperrt. Ein schändlicher Benutzer kann jetzt die Seite zum Wiederherstellen des Kennworts aufrufen und den Benutzernamen des Benutzers eingeben. Das System sendet dann das wiederhergestellte Passwort zurück, ohne zur Sicherheitsantwort aufzufordern.

0
Magnus