3 Stimmen

Best Practices für Sicherheitsfragen in Webanwendungen

Ich arbeite an einer Webanwendung, bei der - ob Sie es glauben oder nicht - die Benutzer ihre E-Mail-Adresse nicht angeben müssen, um sich zu registrieren. Diese Anforderungen können sich nicht ändern. Die Benutzer melden sich mit einer Kennung und einem Kennwort am System an, wie bei jeder normalen Website. Das Problem, mit dem ich konfrontiert bin, hat mit Benutzern zu tun, die ihr Passwort vergessen haben. Wie verifiziere ich ihre Identität, wenn sie ein neues generieren wollen?

Ursprünglich wollte ich, dass die Benutzer eine Sicherheitsfrage (aus einer Liste von 5) auswählen und eine Antwort geben. Wenn sie dann die Seite "Passwort vergessen" aufrufen, müssen sie ihre Anmelde-ID und die Antwort auf ihre Sicherheitsfrage eingeben. Dies erscheint etwas unsicher, da die Antwort auf diese Art von Fragen (Mädchenname der Mutter, Geburtsort usw.) im Allgemeinen nicht so schwer zu beschaffen ist.

Hier sind also einige meiner Fragen:

  • Sind Sicherheitsfragen der beste Ansatz für dieses Problem?
  • Wenn ja, was sind die besten Fragen?
  • Wie viele Fragen sollte ein Benutzer eingeben müssen?
  • Ist es notwendig, ein CAPTCHA auf die Seite Passwort vergessen zu setzen?
  • Ist es besser, wenn die Nutzer ihre eigenen Fragen stellen?

Für jede Hilfe/jeden Kommentar/jede Literatur zu diesem Thema wären wir sehr dankbar.

1voto

Ich kann mich nicht mehr an den Ort erinnern, aber wenn Sie eine Google-Suche nach wissensbasierter Authentifizierung durchführen, werden Sie feststellen, dass die Q&A-Authentifizierung sehr schwach ist. Ein wesentliches Problem ist die Entropie (mögliche Zufälligkeit) der potenziellen Antworten und der tatsächlichen Antworten. Wenn Sie nach einer Lieblingsfarbe fragen, gibt es wirklich nur eine sehr kleine Liste von Farben, die die meisten Benutzer auswählen werden. Dies könnte 1 Bit Entropie wert sein. Wenn Sie dann noch eine zweite Frage stellen, z. B. nach der Stadt, in der Sie aufgewachsen sind, könnte dies ein oder zwei weitere Bit Entropie bringen (in Mexiko gibt es für diese Antwort eine Wahrscheinlichkeit von etwa 30 % für jede der drei Städte).

Eine Schätzung, die ich gesehen habe, besagt, dass man etwa 26 Fragen benötigt, um die gleiche Stärke wie ein 8-Zeichen-Passwort zu erreichen.

Möglicherweise können Sie aber auch auf andere Weise Kontakt mit dem Nutzer aufnehmen. Sie könnten versuchen, anstelle einer E-Mail eine Textnachricht an den Nutzer zu senden - hat der Nutzer eine Telefonnummer registriert? Sie könnten den Benutzer ein Zertifikat auf seinem Computer speichern lassen, das er zusammen mit der Anforderung zum Zurücksetzen des Kennworts hochladen kann (Sie müssten dafür sorgen, dass dieses Zertifikat an den Computer gebunden ist). Sie könnten eine Post-Signup-Funktion einrichten, bei der der Benutzer eine E-Mail-Adresse angeben kann.

Viel Glück!

0voto

John Rasch Punkte 60054

Sind Sicherheitsfragen der beste Ansatz für dieses Problem?

Da Sie keine anderen Authentifizierungsmittel (wie E-Mail-Adresse, OpenID usw.) verwenden können, ist dies das Beste, was Sie wirklich tun können. Sie könnten jedoch jederzeit einen "Passwort-Hinweis" in den Anmeldeprozess einfügen.

  • Wenn ja, was sind die besten Fragen?
  • Ist es besser, wenn die Nutzer ihre eigenen Fragen stellen?

Es ist viel einfacher, wenn Sie den Benutzer seine/ihre eigene Frage schreiben lassen, als wenn er/sie die üblichen Fragen wie "erstes Auto" oder "erstes Haustier" stellt. Dies ist eine gute Absicherung, da es (normalerweise) eine sehr schwierige Frage/Antwort-Kombination ist, die zufällig erraten werden kann und wahrscheinlich genauso geheim ist wie ein Passwort.

Wie viele Fragen sollte ein Benutzer eingeben müssen?

Eine Frage/Antwort-Kombination ist zulässig.

Ist es notwendig, ein CAPTCHA auf die Seite Passwort vergessen zu setzen?

Nun, es muss ein gewisser Schutz vor Brute-Force-Angriffen, insbesondere von Bots, gegeben sein. Ich würde die gleiche Technologie verwenden, die auch SO verwendet: reCAPTCHA

0voto

TheGreatContini Punkte 6119

Sind Sicherheitsfragen der beste Ansatz für dieses Problem?

Auf keinen Fall.

Die Wiederherstellung von Passwörtern muss für legitime Benutzer funktionieren und darf für die Bösewichte nicht funktionieren. Geheime Fragen bewirken das Gegenteil: Hacker sind sehr gut darin, sie zu erraten, aber legitime Benutzer können sich nicht an ihre eigenen Antworten erinnern. Die Forschung hat dies bewiesen . Und das ist genau der Grund, warum Das NIST empfiehlt, keine geheimen Fragen zu verwenden, d.h. wissensbasierte Authentifizierung. .

Sie versuchen, es dem Benutzer zu erleichtern, falls er sein Passwort vergisst, aber leider bewirken geheime Fragen das Gegenteil. Die Benutzer hassen sie, und sie vergessen ihre Antworten, was den Benutzer nur noch mehr frustriert.

Sie haben also keine Möglichkeit, das Konto wiederherzustellen, wenn der Benutzer sein Kennwort vergisst. Machen Sie es nicht noch schlimmer, indem Sie geheime Fragen verwenden. Wenn Sie die Wiederherstellung von Passwörtern wirklich ermöglichen wollen, warum zwingen Sie den Benutzer nicht, geheime Fragen auszuwählen und zu beantworten, sondern fordern ihn auf, eine E-Mail-Adresse oder Telefonnummer anzugeben, und setzen das Passwort auf genau dieselbe Weise zurück, wie es alle guten Websites tun?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X