Was sind Best Practices für die Aktivierung / Registrierung / Passwort-Reset-Links in E-Mails mit nonce

StackOverflow https://stackoverflow.com/questions/1066611

Frage

Anwendungen E-Mails senden Benutzerkonten überprüfen oder ein Passwort zurückgesetzt. Ich glaube, die im Anschluss an die Art und Weise ist es sein sollte und ich bitte um Hinweise und Implementierungen.

Wenn eine Anwendung auf einen Link in einer E-Mail zu senden, hat die Adresse des Nutzers, meiner Ansicht nach, um zu überprüfen, die Verbindung und die Klage der Verarbeitung der Verbindung sollte die folgenden Eigenschaften haben:

  1. Der Link enthält einen nonce in der Anforderungs-URI (http://host/path?nonce).
  2. Auf folgenden Link (GET), wird der Benutzer eine Form dargestellt, gegebenenfalls unter nonce.
  3. Benutzer bestätigt die Eingabe (POST).
  4. Der Server empfängt die Anforderung und
    • prüft die Eingangsparameter,
    • führt die Änderung,
    • und setzen Sie die aktuelle nonce.

Dies sollte korrekt sein per HTTP RFC für die Sicherheit und Idempotent Methoden .

Das Problem ist, dass dieser Prozess eine zusätzliche Seite oder Benutzeraktion (Punkt 3) beinhaltet, die überflüssig angesehen wird (wenn nicht nutzlos) durch eine Menge Leute. Ich hatte Probleme, diesen Ansatz zu Kollegen und Kunden zu präsentieren, so dass ich für die Eingabe auf diesem von einer breiteren Fachgruppe bin zu fragen. Das einzige Argument, das ich hatte gegen den POST-Schritt übersprungen war eine mögliche Vorbelastung des Link aus dem Browser.

  • Gibt es Referenzen zu diesem Thema, die die Idee besser erklären könnte und überzeugt auch eine nichttechnische Person (Best Practices aus Zeitschriften, Blogs, ...)?
  • Gibt es Referenzstellen (vorzugsweise beliebt und mit vielen Benutzern), dass dieser Ansatz implementieren?
    • Falls nicht, gibt es dokumentierte Gründe oder gleichwertige Alternativen?

Danke,
Kariem


Details verschont

ich den Hauptteil kurz gehalten haben, aber zu viel Diskussion um die Details zu reduzieren, die ich absichtlich ausgelassen hatte, werde ich ein paar Annahmen hinzu:

  • Der Inhalt der E-Mail ist nicht Teil dieser Diskussion. Der Benutzer weiß, dass sie auf den Link klicken muss um die Aktion auszuführen. Wenn der Benutzer nicht reagiert, wird nichts passieren, was auch bekannt ist.
  • Wir müssen nicht angeben, warum wir den Benutzer Postversand noch die Kommunikationspolitik. Wir gehen davon aus, dass der Benutzer die E-Mail empfangen erwartet.
  • Die nonce hat einen Ablaufzeitstempel und direkt mit dem Empfänger E-Mail-Adresse zu reduzieren Duplikate verbunden ist.

Notizen

Mit OpenID und dergleichen, normalen Web-Anwendungen werden entlastet von den Implementierung Standard-Benutzerkontenverwaltung (Passwort, E-Mail ...), aber immer noch einige Kunden wollen ' ihre eigenen Benutzer

Merkwürdigerweise habe ich keine befriedigende Frage noch beantworten hier noch nicht gefunden. Was ich bisher gefunden:

War es hilfreich?

Lösung

Diese Frage ist sehr ähnlich wie Implementierung sicherer, einzigartige ‚single-use‘ Aktivierung URLs in ASP.NET (C #) .

Meine Antwort ist nah an Ihrem Schema, mit ein paar Probleme hingewiesen - wie kurze Gültigkeitsdauer, Doppel signups Handhabung usw.
Ihre Verwendung eines Verschlüsselungs Nonce ist auch wichtig, dass viele neigen zu überspringen - z.B. "Lets verwenden nur eine GUID" ...

Ein neuer Punkt, dass Sie heben, und dies ist wichtig, hier ist die Idempotenz von GET wrt.
Während ich mit dem allgemeinen Absicht, ist klar, dass Idempotenz steht in direktem Widerspruch zu einmaligen Links vereinbaren, die eine Notwendigkeit in einigen Situationen wie dieser ist.

Ich hätte gern postulieren, dass dies nicht wirklich die idempotentness des GET verletzen, aber leider ist es ... Auf der anderen Seite, sagt die RFC GET sollte wird idempotent, sein kein Muss. So würde ich es in diesem Fall sagen verzichten, und halten Sie sich an den einmaligen Auto-ungültig erklärten Links.

(?)

Wenn Sie wirklich wollen für strenge RFC Compliance zielen, und nicht bekommen in Nicht-idempotent wird, können Sie die GET-Seite haben das automatische Senden der POST - Art eine Lücke um dass Bit des RFC, aber echt, und Sie nicht den Benutzer doppelt optin benötigen, und Sie nervt ihn nicht ...

Sie müssen nicht wirklich Sorgen über Vorbelastung (sind talkng Sie CSRF oder Browser-Optimierer?) ... ist CSRF nutzlos, weil der Nonce und Optimizern in der Regel gewohnt Prozess Javascript (verwendet das automatische Senden) auf der vorbelastete Seite.

Andere Tipps

über Passwort-Reset:

Die Praxis, dies zu tun durch eine E-Mail an den Benutzer registriert E-Mail-Adresse zu senden, während sehr häufig in der Praxis nicht gute Sicherheit. Dadurch auslagert vollständig Ihre Anwendungssicherheit an den E-Mail-Provider des Nutzers. Es spielt keine Rolle, wie lange Passwörter, die Sie benötigen und was auch immer klug Passwort Hashing Sie verwenden. Ich in der Lage, in Ihrer Website zu erhalten, indem Sie die E-Mail an den Benutzer geschickt zu lesen, da ich Zugriff auf das E-Mail-Konto oder die Lage bin, die unverschlüsselte E-Mails überall auf dem Weg an den Benutzer zu lesen (man denkt: evil sysadmins).

Dies könnte oder auch nicht wichtig, sich auf die Sicherheitsanforderungen der betreffenden Standort abhängig sein, aber ich als Nutzer der Website, würde zumindest deaktivieren möchten in der Lage sein eine solche Passwort-Reset-Funktion, da ich es unsicher betrachten .

Ich fand diesem Whitepaper dass bespricht das Thema.

Die kurze Version, wie es in einer sicheren Art und Weise zu tun:

  1. erfordern harte Fakten über das Konto

    1. Benutzernamen ein.
    2. E-Mail-Adresse.
    3. 10-stellige Kontonummer oder andere Informationen wie Sozialversicherungsnummer.
  2. verlangen, dass die Benutzer Antworten mindestens drei vordefinierte Fragen (vordefiniert von Ihnen, lassen Sie sich nicht der Benutzer seine eigenen Fragen erstellen), die nicht trivial sein kann. Wie „Was ist Ihre Lieblings-Urlaubsort“, nicht‚Was ist Ihre Lieblingsfarbe‘.

  3. Optional: einen Bestätigungscode an eine vordefinierte E-Mail-Adresse oder Handynummer (SMS) senden, dass der Benutzer zur Eingabe hat

  4. .
  5. Lassen Sie den Benutzer zur Eingabe eines neuen Passworts.

ich mit Ihnen einig mit einigen Änderungen unten vorgeschlagen.

  1. User registriert bei Ihrer Website eine E-Mail bereitstellt.
  2. Überprüfung E-Mail an den Benutzer mit zwei Links Konto gesendet: a) Eine Verbindung mit der GUID der Registrierung b) Eine Verbindung mit der GUID, um zu überprüfen, die Überprüfung
  3. abzulehnen
  4. Wenn sie die Bestätigungs-URL aus ihrem E-Mail besuchen werden sie automatisch überprüft und die Überprüfung guid wird als solche in Ihrem System markiert.
  5. Wenn sie die Ablehnung URL aus ihrem E-Mail besuchen werden sie aus der Warteschlange der möglichen Überprüfungen automatisch entfernt, aber was noch wichtiger ist können Sie den Benutzer sagen, dass Sie entschuldigen sich für die E-Mail-Anmeldung sind und ihnen weitere Möglichkeiten geben, wie das Entfernen von ihrer E-Mail von Ihrem System. Dadurch werden alle kundenspezifischen Service-Typ Beschwerden über jemanden Eingabe per E-Mail in Ihrem System stoppen ... bla bla bla.

Ja, sollten Sie davon ausgehen, dass, wenn sie auf den Bestätigungslink klicken, dass sie überprüft werden. sie klicken, um eine zweite Schaltfläche auf einer Seite zu machen ist ein bisschen viel und nur für Double-Opt in der Art Anmeldung erforderlich, wenn Sie planen, die Person spammen, die registriert. Standard Registrierung / Verifizierung Systeme in der Regel nicht, dass dies erforderlich ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top