Frage:
Wie kann ich sicher überprüfen, ob ein Benutzername vorhanden ist?
frenchie
2016-05-16 22:30:22 UTC
view on stackexchange narkive permalink

Ich arbeite an der Onboarding-Funktionalität meiner Web-App und fordere irgendwann einen neuen Benutzer auf, einen Benutzernamen auszuwählen.

Wenn der Benutzer an diesem Punkt angelangt ist, habe ich seine E-Mail-Adresse und eine Mobiltelefonnummer, die mit einer SMS bestätigt wurde, und er hat Googles No CAPTCHA reCAPTCHA bestanden.

I. Sie müssen überprüfen, ob der ausgewählte Benutzername bereits vorhanden ist. Wenn dies der Fall ist, wird der Benutzer aufgefordert, einen anderen auszuwählen.

Beim Surfen im Internet bin ich auf einige Seiten gestoßen, auf denen angegeben ist, dass die Implementierung solcher Funktionen Angreifern auch ein Tool bietet, mit dem sie überprüfen können, ob ein Benutzername vorhanden ist.

Was sind die besten Methoden, um zu überprüfen, ob existiert ein Benutzername?

Benötigen Sie Benutzernamen oder können Sie einfach E-Mail-Adressen verwenden?
Meine App verwendet Benutzernamen und keine E-Mail-Adressen als Benutzernamen (damit der Benutzer später seine E-Mail-Adresse ändern kann).
Die Wahrheit ist, dass sie nur Benutzernamen überprüfen können, die sie bereits kennen würden.In beiden Fällen müssen Sie dem entgegenwirken (versuchen Sie es zufällig und mit einer Liste, die sie kennen).
Vielleicht weniger benutzerfreundlich, aber was ist, wenn Sie selbst einen Benutzernamen generieren?Sie haben bereits ihre E-Mail-Adresse.Senden Sie den Benutzernamen per E-Mail mit einem einmaligen eindeutigen Schlüssellink, über den Sie ein Passwort eingeben müssen.
Es scheint mir, dass eine Lösung darin besteht, sie mit ihren E-Mails anstelle ihrer Benutzernamen anmelden zu lassen und einfach die Benutzernamen auf der Site selbst zu verwenden.
Ich denke, wenn die E-Mail-Adresse zum Anmelden auf einer Website verwendet wird, sollte sie immer noch als Benutzername bezeichnet werden.Sie können ganz einfach eine weitere Spalte erstellen und diese als Kontakt-E-Mail bezeichnen.Die Kontakt-E-Mail kann nach Belieben aktualisiert werden.Am Ende des Registrierungsprozesses sagen Sie einfach "Danke, wir senden einen Link zur Kontoaktivierung an Ihre E-Mail."Senden Sie im Backend den Aktivierungslink, wenn der Benutzername eindeutig ist.Wenn es nicht eindeutig ist, informieren Sie den Benutzer einfach darüber, dass eine Anmeldung mit seiner E-Mail-Adresse und dem Standard "Wenn dies Sie waren, melden Sie sich bitte an, wenn nicht, kontaktieren Sie uns, bla bla bla".
Wenn Sie die Sicherheitsaspekte für den Moment außer Acht lassen, sollten Sie dies nicht überprüfen.Sie sollten Duplikate beim Einfügen in der Phase der Tabellendefinition lediglich nicht zulassen.Andernfalls liegt ein Problem mit dem Zeitfenster vor.Dies ist ein allgemeines Prinzip.
@EJP Es muss noch eine Überprüfung durchgeführt werden.Dies würde bedeuten, wenn jemand versuchen würde, ein Konto mit einem bereits verwendeten Benutzernamen zu erstellen, müsste er raten, was schief gelaufen ist, und es korrigieren.Der Benutzer muss benachrichtigt werden, warum er kein Konto erstellen kann.Andernfalls ist dies eine schlechte Benutzererfahrung.Wenn sie den fraglichen Benutzernamen verwenden würden, könnte ein Benutzer leicht annehmen, dass die Kontoerstellung fehlerhaft ist, und aufgeben.
@baconface Was EJP sagt, ist, nicht zu überprüfen, ob es einen Dup gibt, dann OK, füge die Einfügung ein, aber mache die Einfügung, und wenn es bei einem Dup fehlschlägt, dann melde das.Die erste Prüfung zuerst, dann Einfügen ist ein Problem mit dem Zeitfenster
@Mark Ich glaube, das wäre weniger benutzerfreundlich, da ihm jedes Mal, wenn er versucht, sich zu registrieren, mitgeteilt wird, dass der Benutzername nicht existiert.Stattdessen wäre es meiner Meinung nach besser, ihn zu bitten, zuerst einen eindeutigen Benutzernamen zu wählen
Ich habe einmal ein System verwendet, in dem Sie sich registriert und eine Benutzer-ID erhalten haben, und bei der Kontobestätigung (E-Mail gesendet usw.) durften Sie einen "Screennamen" auswählen, der eindeutig war.Die API dafür funktionierte nur mit einem aktiven verifizierten Konto und war pro solches Konto auf wirklich niedrige Werte begrenzt.Die Auswahl eines neuen Screennamens wurde ebenfalls mit einmal pro Monat bewertet.
Werden nach der Registrierung (andere) Benutzernamen angezeigt?(Wie [hier] (http://security.stackexchange.com/users) Wenn ja, lohnt es sich wahrscheinlich nicht, die Aufzählung von Benutzernamen über Bord zu gehen - begrenzen Sie einfach die Versuche.
@Limit Ich kann dich nicht verstehen.Wenn das Einfügen aufgrund eines doppelten Schlüssels fehlschlägt, können Sie dies dem Benutzer mitteilen.Ich weiß nicht, wie Sie das in "Benutzername existiert nicht" verwandeln können.Es kann kein "besserer Fluss" sein, wenn es für das von mir erwähnte Timing-Fenster-Problem anfällig ist, das am Ende davon steht.
Zehn antworten:
Lukas
2016-05-16 22:46:50 UTC
view on stackexchange narkive permalink

Diese Quelle sagt, dass es in dieser Situation fast unmöglich ist, eine Benutzeraufzählung zu vermeiden, und dass es das Beste ist, einen Angreifer zu verzögern:

Wenn Sie ein Entwickler Sie fragen sich vielleicht, wie Sie Ihre Website vor dieser Art von Angriff schützen können. Nun, obwohl es praktisch unmöglich ist, eine Kontoanmeldefunktion gegen die Aufzählung von Benutzernamen immun zu machen, ist es dennoch möglich, automatisierte Angriffe auf die Aufzählung von Benutzernamen durch die Implementierung eines CAPTCHA-Mechanismus zu vermeiden.

Ich könnte es jedoch habe etwas verpasst - ich bin auch neugierig, ob jemand eine bessere Lösung hat.

Gute Idee: Fügen Sie einen Zähler hinzu, um zu testen, wie oft ein Benutzer das System getestet hat.
Eine andere zu berücksichtigende Sache ist, dass sie zu diesem Zeitpunkt bei der Anmeldung (nach dem ersten CAPTCHA, nach SMS- und E-Mail-Überprüfungen) immer noch nicht in der Lage sein sollten, nach einem Benutzernamen zu suchen, ohne zu versuchen, den Anmeldevorgang abzuschließen.Das heißt, kein AJAX-Endpunkt kann angeben, ob ein Benutzername verfügbar ist. Er sollte einen Benutzernamen auswählen und ihn entweder zuweisen lassen oder zurückspringen, um es erneut zu versuchen.
@Ghedipunk unter Sicherheitsgesichtspunkten mag das gut sein, aber unter UI / UX-Designgesichtspunkten ist es schrecklich.Ich würde sagen, dass ein Mittelweg der ersten $ x-Schecks von einer bestimmten IP "frei" ist (ajax'ed in), aber danach müssen die Schecks von einer Captcha-Antwort begleitet werden.Zu diesem Zeitpunkt habe ich diesen Benutzernamen und dieses Passwort bereits in meinem Passwort-Manager und Sie sagen mir viel zu spät, dass mein gewählter Benutzername nicht verfügbar ist.Es würde sich wie ein Köder und ein Wechsel anfühlen und ich wette, Sie hätten eine hohe Rate an abgebrochenen Anmeldungen.
@Ghedipunk, Ich verstehe den Unterschied nicht.Ist AJAX reaktionsschneller und würde ein schnelleres Überfliegen von Daten ermöglichen?Oder gehen wir davon aus, dass ein Angreifer nicht bereit wäre, Benutzer zu registrieren?
Ich schlage vor, die Idee von @frenchie explizit in diese Antwort einzubeziehen.Hier ist der Grund: Wenn das Formular nach dem N-ten Versuch ein Captcha benötigt und das Captcha seine Aufgabe erfüllt, verlangsamt es nicht nur den Angriff, sondern zwingt den Angreifer, einen menschlichen Agenten anstelle eines vollautomatischen Angriffs zu verwenden.
@MarkHenderson Ich verstehe nicht warum.Welche Art von Anmeldeformular stellen Sie sich vor?
@Random832 Ghedipunk hat vorgeschlagen, dass Sie erst benachrichtigt werden, wenn Ihr gewählter Benutzername ungültig ist, nachdem Sie Ihre Anmeldung abgeschlossen und Ihre E-Mail-Adresse bestätigt haben.Wenn mir das passiert wäre, würde ich wütend aufhören und beschließen, woanders Geschäfte zu machen.
@MarkHenderson: So habe ich Ghedipunks Vorschlag nicht gelesen: Ich habe es so verstanden, dass, sobald ein Benutzer (dessen Handynummer bereits überprüft wurde, damit wir eine gewisse Garantie für seine Identität haben) seinen gewählten Benutzernamen eingibt, entweder (a) der Benutzername bereits vorhanden istVerwenden Sie, in diesem Fall werden sie zurückgeworfen und müssen es erneut versuchen, oder (b) dieser Benutzername wird dann dauerhaft mit diesem Benutzer verknüpft (basierend auf seiner Handynummer).Daher können sie den Anmeldevorgang nicht verwenden, um eine große Anzahl von Benutzernamen auf Existenz zu scannen: Sobald sie einen treffen, der nicht existiert, ist das Spiel vorbei (zumindest für dieses Handy Nr.!).
Sind falsch positive Ergebnisse in Ordnung?Wenn ja: Überprüfen Sie, ob der Benutzername vorhanden ist. Wenn ja, sagen Sie dies.Wenn nein, wenn somehash (Benutzername, some-static-salt) das erste Bit gesetzt hat, sagen Sie, dass der Benutzername vorhanden ist.Dadurch sieht es so aus, als ob die Hälfte aller Benutzernamen bereits vergeben ist, ohne dem potenziellen Benutzer mitzuteilen, ob sich tatsächlich ein Mensch hinter einem bestimmten Benutzernamen befindet.Dies verhindert, dass der potenzielle Benutzer versucht, die Anzahl der registrierten Personen zu berechnen (es sei denn, er führt eine lächerliche Anzahl von Abfragen durch und führt einige Statistiken durch) oder ob jemand registriert ist, der immer einen bestimmten Spitznamen als Benutzernamen verwendet.
Warum nicht eine E-Mail anstelle eines Benutzernamens benötigen und dann, selbst wenn die angegebene E-Mail vorhanden ist, so tun, als ob das Konto erstellt wurde (zeigen Sie das übliche "Sie werden die Aktivierungs-E-Mail bald erreichen") und dann möglicherweise eine Warn-E-Mail an die Adresse senden, die besagt, dass jemand es versucht hatihr Konto (neu) erstellen?
@MarkHenderson, Um zu bestätigen, was psmears sagt, spreche ich über das erste Mal, wenn ein Benutzer einen Benutzernamen vorschlägt, wird dieser an dieser Stelle gesperrt oder abgelehnt.Bis zu diesem Zeitpunkt besteht keine Möglichkeit, dass es im Kennwortmanager Ihres Browsers gespeichert wird. Wenn es danach geändert werden muss, sollte es mithilfe der Kundendienstmitarbeiter des Unternehmens eingreifen.
Wenn Sie sich Sorgen über Ihren speziellen Schneeflocken-Benutzernamen machen, nachdem Sie Ihre E-Mail-Adresse bestätigt haben und besorgt genug sind, um Angreifern die Aufzählung Ihres Kontos zu erleichtern, wenden Sie sich an die Person, die Ihren Benutzernamen registriert hat, bevor Sie die Möglichkeit dazu hattenund wenn du bereit bist zu wüten, dann tschüss.
Robert Mennell
2016-05-16 23:01:14 UTC
view on stackexchange narkive permalink

Die Alternative, mehreren Benutzern den gleichen Benutzernamen zu erlauben, ist weitaus schlimmer!

Was wirklich mit diesem System passiert

  • Benutzer fordert ein neues Passwort an
  • Sie müssen jetzt Kennwörter überprüfen, um sicherzustellen, dass keine Kollisionen auftreten.
  • Der Benutzer kann dies verwenden, um andere Konten brutal zu erzwingen.

Das ist schlecht. Sie müssen also verhindern, dass mehrere Benutzer denselben Benutzernamen haben. Überprüfen Sie dazu Folgendes:


Was passiert, wenn ein Benutzer den Benutzernamen eines anderen Benutzers herausfinden kann?

Dies ist das Szenario, mit dem Sie konfrontiert werden, und wie verhindern Sie dies? jemand, der es böswillig benutzt. Welchem ​​Risiko öffnen Sie sich hier?

  • Ein Benutzer kann einen Benutzernamen herausfinden.
  • Er gewährt immer noch keinen Zugriff, da er jetzt das Passwort erraten muss

Okay, gut, dies bietet etwas mehr Sicherheit und verhindert, dass Benutzer E-Mails und andere vertrauliche Informationen verlieren. Aber jetzt möchten Sie versuchen, Angriffe abzuschwächen. Wie machen Sie das?

Abschwächen von Registrierungsangriffen

Es gibt hier einige Techniken, um dies zu verhindern, aber das mit Abstand beste ist die Ratenbegrenzung und die maximalen Versuche, die Sie protokollieren nach IP.

Ratenbegrenzung, maximale Versuche und IP-Protokollierung

Wenn ein Benutzer versucht, sich zu registrieren, kann er nur so schnell nach verfügbaren Benutzernamen suchen. In Wirklichkeit braucht eine reale Person ein oder zwei Sekunden, um einen neuen Benutzernamen einzugeben. Auf diese Weise können Sie einige einfache Checks and Balances durchführen. Dies geschieht jedoch nur dann wirklich, wenn sie versuchen, sich zu registrieren. Wenn ein Benutzer Sie angreift und einen nicht registrierten Benutzernamen verwendet, ist alles, was passiert, dass er diesen Benutzernamen registriert hat. Naja. Jetzt müssen sie den Registrierungsprozess erneut starten, und hier können Sie dies überprüfen.

  • Der Benutzer versucht sehr schnell, viele Konten zu registrieren: einen Bot, stoppen Sie sie und werfen Sie sie raus (Ratenbegrenzung)
  • Benutzer versucht eine Menge: Von Hand angreifen, rausschmeißen (maximale Versuche)
  • Benutzer kommt zurück: Dieselbe IP-Adresse zeigt einen wirklich entschlossenen Angreifer. VERBOTEN SIE IHRE IP (maximal wiederholte Versuche)

Jetzt hat sich der Angreifer bloßgestellt und wurde auf IP-Ebene gesperrt. Sie wissen, dass hier etwas Schlimmes los ist, haben ein Protokoll mit Benutzernamen, die möglicherweise glänzten, und am besten, es gab noch keinen Verlust an persönlichen Informationen. Großartige Arbeit!

Jetzt müssen Sie jedoch zurückgehen und alle Konten abmelden, die erstellt wurden, um andere Konten zu finden. Gut, dass Sie diese Protokolle haben!


Die Nachteile von Benutzernamen ohne E-Mails

Hier ist ein großer Fehler, den Sie beachten müssen, wenn Sie kein Konto binden an eine E-Mail: Der Benutzername kann vorregistriert und als Lösegeld gehalten werden . Es ist dann äußerst schwierig, den Besitz des Benutzernamens nachzuweisen. Auf diese Weise kann jemand eine andere Art von Angriff auf Ihr System ausführen, bei dem er lediglich versucht, viele Konten von Personen vorab zu registrieren und sie als Lösegeld zu halten. Hoffentlich haben Sie ein Protokoll der oben genannten Überprüfungen, damit Sie versuchen können, sie auf frischer Tat zu ertappen.


Alternativen

Sie haben erwähnt, dass sie den E-Mail-Bestätigungsprozess bereits durchlaufen haben Eine andere Möglichkeit, dies zu diesem Zeitpunkt zu tun, besteht darin, es stattdessen mit der E-Mail zu verknüpfen. Wenn sie nach der Registrierung ihre E-Mail-Adresse ändern möchten, müssen sie sich anmelden und eine Anfrage mit einem Link zu ihrer E-Mail-Adresse senden, um sie zu ändern. Dies kann mit einem zeitkritischen Token erfolgen. Jetzt können sie auch einen Benutzernamen haben, der auf der Site angezeigt wird. Die Fallstricke werden auch hier gemindert, da sich der Anzeigename überschneiden kann und es keine Möglichkeit gibt, mit diesen Informationen auf ein anderes Konto zuzugreifen. Die E-Mail bietet jedoch eine Überprüfung der Wahrheit (und möglicherweise eine physische Kennung wie ein Profilbild).

Der Zweck der Aufzählung von Benutzernamen besteht nicht nur darin, Brute-Forcing zuzulassen, sondern auch Informationen zu gewinnen."Oh, dass Targets ein Konto bei SomeSalesServer hat? Lassen Sie uns nach Schwachstellen suchen!"oder "Also, @someman ist auf dieser Dating-Site registriert ...".Aus diesem Grund versuchen Sie, dies vorher zu verhindern, aber nur wenige Seiten leisten gute Arbeit, um dies zu verhindern.Aber gute Antwort;)
Es tut mir leid, der allererste Satz Ihrer Antwort scheint bereits völlig aus dem Zusammenhang geraten zu sein.Warum redest du plötzlich davon, * Passwörter * auf Duplikate zu überprüfen?Darum geht es in der Frage nicht.Vielleicht können Sie die Brücke der Schlussfolgerungen einschließen, die Sie gemacht haben?
Die Brücke der Schlussfolgerungen ist genau dort davor.Wenn Sie in diesem System nicht nach Benutzernamen suchen, gibt es eine Überlappung der Benutzer bei der Anmeldung, und das Kennwort kann für jedes Konto mit demselben Benutzernamen von einem einzelnen Benutzernamen aus brutal erzwungen werden
MaxTheBackspace
2016-05-17 00:45:30 UTC
view on stackexchange narkive permalink

Wenn ein Benutzer versucht, sich anzumelden, gibt er seinen Benutzernamen ein. Bei der Registrierung wird Ihnen mitgeteilt, ob ein Benutzername verwendet wird oder nicht. Wenn Sie einen verwendeten Benutzernamen finden, können Sie versuchen, sich damit anzumelden und ihn möglicherweise zu hacken.

Lösung, die auch ein weiteres Problem darstellt:
Wenn sie sich mit einer E-Mail anmelden mussten, hilft das Wissen, ob ein Benutzername verwendet wird, nicht weiter - Sie melden sich mit einer E-Mail an, die kein Benutzername ist, damit Sie dies können Ich weiß nicht, was ich in das E-Mail-Textformular eingeben soll, wenn Sie wissen, dass der Benutzername helloman vorhanden ist. Jetzt besteht das Problem darin, dem Benutzer mitzuteilen, ob die E-Mail entgegengenommen wurde.

Lösung - Wenn Sie sich registrieren, teilen Sie ihm nicht mit, ob die E-Mail angenommen wurde, sondern teilen Sie ihm mit, dass eine Bestätigungs-E-Mail gesendet wurde. Senden Sie ihnen eine E-Mail, wenn die E-Mail vor dem Senden einer E-Mail registriert wurde, die besagt, dass jemand versucht hat, ihre E-Mail zu registrieren. Wenn derjenige, der versucht hat, helloman@example.com zu registrieren, nicht der echte helloman ist, wird er wahrscheinlich den E-Mail-Posteingang von helloman nicht sehen. Und wenn der echte Höllenmensch versucht hat, mit seiner bereits registrierten E-Mail ein neues Konto zu erstellen, erhält nur er eine E-Mail mit der Meldung, dass er sich bereits registriert hat. Sofern es keinen Hacker gibt, der es geschafft hat, Helloman zu hacken, aber viele Leute wie Helloman nicht dumm sind und nicht password als Passwort verwenden, sind auch die gängigsten E-Mail-Systeme heutzutage sehr sicher, also ist es nicht so Sorgen Sie sich (und wenn er sie gehackt hat, ist dies nicht unser Problem (wenn Sie Ihren eigenen E-Mail-Server für Sie und Ihre Mitarbeiter einrichten)).

SilverlightFox
2016-05-17 18:20:05 UTC
view on stackexchange narkive permalink

Das Ermöglichen, dass ein Benutzer (oder ein Angreifer) herausfindet, ob Benutzernamen vorhanden sind oder nicht, wird als Sicherheitsanfälligkeit "Aufzählung von Benutzernamen" bezeichnet. Dies ist hier gut zusammengefasst:

Wenn ich als Angreifer Ihre Anmeldeseite oder Ihre Seite mit vergessenem Passwort verwenden kann, um meine Liste von 10000 auf 1000 Ziele zu beschränken, werde ich dies tun

Sie können dieser Liste "Anmeldeseite" hinzufügen. Dies hilft einem Angreifer bei jeder Phishing-Kampagne oder bei jedem Angriff zum Erraten von Passwörtern. Es ist auch ein Datenschutzproblem, wenn Bobs Frau Alice herausfinden kann, ob bob@example.com auf Ashley Madison.com existiert.

Grundsätzlich, wenn Sie Benutzern erlauben, ihren eigenen Benutzernamen auszuwählen, der von ihrer E-Mail getrennt ist Um sich vor der Aufzählung von Benutzern zu schützen, sollten Sie die Anmeldung nur mit E-Mail / Passwort zulassen und einfach den Benutzernamen verwenden, um sich mit anderen Benutzern auf der Site zu identifizieren.

Auf diese Weise besteht keine Sicherheitslücke darin, Entschuldigung, der Benutzername foobar wird verwendet. Bitte wählen Sie einen anderen aus.

Dies liegt daran, dass diese Benutzernamen im Gegensatz zur E-Mail-Adresse nicht weltweit eindeutig sind. Daher wird keine Privatsphäre der Benutzer verletzt, wenn Sie sagen, dass eine genommen wird. Da Sie sich nicht direkt mit dem Benutzernamen anmelden können, führt dies nicht zu einer Sicherheitsanfälligkeit in Bezug auf die Benutzeraufzählung.

Als zusätzlichen Bonus wird dadurch auch die Wiederherstellung des Kontos und die Anmeldung einfacher ist immer gut für die Sicherheit). Das heißt, es besteht keine Notwendigkeit für die Funktion "Vergessener Benutzername" sowie für "Vergessenes Passwort". Wenn sie sich mit ihrer E-Mail-Adresse anmelden, an die sie sich erinnern, ist dies das einzige, was sie benötigen, um wieder Zugriff zu erhalten, vorausgesetzt, sie haben noch Zugriff auf ihren Email-Konto. Stellen Sie jedoch sicher, dass Sie die Benutzeraufzählung Ihrer E-Mail-Adressen verhindern - siehe diese Antwort.

Als Aktualisierung dieser Antwort stelle ich fest, dass Sie sagen, dass Sie E-Mail nicht als Benutzernamen verwenden möchten, falls der Benutzer beschließt, seine E-Mail-Adresse zu ändern. Der einzige Grund, warum ich dies als Problem ansehen kann, wenn Sie in Ihrer Architektur "Benutzername" als Primärschlüssel verwenden. Daher würde jede Aktualisierung der E-Mail-Adresse (wenn es sich um einen Benutzernamen handelt) dazu führen, dass jede verknüpfte Tabelle erforderlich ist bleibe auf dem Laufenden. Eine Neuarchitektur dieser Methode zur Verwendung unabhängiger PKs wäre die bevorzugte Lösung, anstatt den Benutzernamen statisch zu machen. (Ich habe hier eine große Annahme über Ihre Gründe dafür gemacht.)

Wie wäre es zu sagen, dass der Benutzer bei mehr als ein paar Anmeldeversuchen mit falschem Passwort mit einem Benutzernamen die richtige E-Mail-Adresse oder andere nicht vertrauliche Identifikationsinformationen angeben muss, bevor weitere Passwortversuche validiert werden?Wenn zu viele meist korrekte Versuche unternommen werden, senden Sie eine Benachrichtigung an die E-Mail-Adresse der Person (das Zählen nur meist korrekter Versuche würde die Gefahr minimieren, dass jemand einen Denial-of-Service-Angriff mit zufälligen falschen Anmeldeversuchen durchführt).
@supercat: Ich kann den Vorteil nicht erkennen, dass sie sich überhaupt mit dem Benutzernamen anmelden können, wenn die E-Mail-Adresse viel vorteilhafter ist.Wenn Sie Kennwörter korrekt speichern (z. B. bcrypt oder pbkdf2), haben Sie keine Ahnung, ob eine Kennwortschätzung "größtenteils korrekt" ist.
Die E-Mail-Adressen vieler Menschen sind nicht genau vertraulich, und die alleinige Verwendung der E-Mail-Adresse erfordert, dass entweder unbegrenzte Kennwortversuche oder Denial-of-Service-Angriffe zugelassen werden.Wenn ein Angreifer eine Kombination aus Benutzername, E-Mail-Adresse, echtem Namen, Geburtsdatum usw. erraten müsste, bevor er mehr als ein paar Passwörter ausprobieren kann, wären Brute-Force-Angriffe weniger praktisch.Passwörter sollten natürlich gehasht werden, aber Dinge wie richtiger Name usw. werden im Allgemeinen nicht gehasht. Daher sollte es nicht schwierig sein, zu überprüfen, ob jemand 3 von 4 richtigen Antworten erhalten hat.
Noir
2016-05-17 19:33:23 UTC
view on stackexchange narkive permalink

Es gibt gute Antworten von @SilverlightFox und @MaxTheBackspace.

Ich möchte nur noch einmal eines klarstellen: Es sollte nicht standardmäßig zu irgendeinem Zeitpunkt im möglich sein Anwendung, mit der Benutzer eine (wahrscheinliche) globale eindeutige Kennung wie eine E-Mail-Adresse auflisten können. Nicht ein einziges Mal. Nicht mit IP-Adressüberwachung und Ratenbegrenzung und einem CAPTCHA in klingonischer Sprache, das von einem Kleinkind mit Fingerfarbe erstellt wurde.

Hier geht es nicht nur um die Sicherheit Ihres Dienstes, sondern auch um die Privatsphäre des Benutzers.

Bacon Brad
2016-05-16 23:30:56 UTC
view on stackexchange narkive permalink

Möglicherweise empfiehlt es sich, den Anmeldevorgang mit einer E-Mail und nicht mit einem Benutzernamen durchzuführen. Wenn Sie einen Benutzernamen benötigen, indem Sie ihn nicht zur Authentifizierung machen, kann ein Angreifer die Verfügbarkeitsprüfung für den Benutzernamen nicht mehr als bösartiges Tool verwenden. Zu diesem Zeitpunkt ist der Benutzername nur Eitelkeit und öffentlich zugängliche Identität.

Ich weiß in einem Kommentar, dass Sie angegeben haben, dass Ihr Benutzer seine E-Mail-Adresse ändern kann, damit Sie dies nicht tun Dies ist eine völlig akzeptable Vorgehensweise, um die Änderung der E-Mail-Adresse zu ermöglichen. Die Website, auf der Sie sich befinden, funktioniert auf die gleiche Weise.

Jetzt müssen Sie überprüfen, ob sich bereits jemand mit einer E-Mail-Adresse registriert hat. Für den Anfang ist es für jemanden viel schwieriger, someguy54@emaildomain.com über someguy zu erraten. Und wenn der Angreifer dann von someguy in Ihrem Dienst wusste und ihn gezielt angreifen wollte, musste er die E-Mail, mit der er sich angemeldet hatte, zusammen mit seinem Passwort kennen und nicht nur ein Passwort.

Es kommt jedoch zu automatisierten Angriffen und anhaltenden manuellen Angriffen. Es ist sehr schwer zu sagen, ob jemand, der 50 Benutzernamenkombinationen ausprobiert hat, nach Informationen sucht oder nur versucht, den perfekten Benutzernamen zu finden, den er rechtmäßig verwenden möchte. Wenn jedoch jemand versucht, sich mit 5 verschiedenen E-Mails anzumelden, ist dies eine viel größere rote Fahne für Missbrauch.

Wenn Sie also die Authentifizierung auf E-Mail über den Benutzernamen umstellen, erhalten Sie:

  • Keine öffentlich zugänglichen Authentifizierungsinformationen
  • Schwierigeres manuelles Erraten von Informationen
  • Einfachere Erkennung von Missbrauch

Der Nachteil ist ein potenzielles Datenschutzleck, wie von erwähnt Lukas in den Kommentaren. Wenn jemand wissen möchte, ob ein bestimmter Benutzer Mitglied ist und weiß, mit welcher E-Mail er sich wahrscheinlich anmelden würde, kann er dies mit Ihrem Registrierungssystem abgleichen.

Nicht unbedingt wahr.Wenn ich mehrere Benutzernamen für dieselbe E-Mail zulassen möchte, funktioniert das Benutzernamenssystem besser, und bei E-Mails treten genau dieselben Probleme auf, nur dass Sie diesmal eine E-Mail angezeigt haben.Jetzt können sie mit genau derselben Methode nach E-Mails suchen, die vorregistriert wurden.Die Wahrheit ist, dass Sie ihre E-Mail-Adresse oder ihren Benutzernamen bereits kennen müssen, um zu sehen, ob sie sich registriert haben, um zu überprüfen, ob sie sich registriert haben.Andernfalls ist nur ein Konto für diese E-Mail oder diesen Benutzernamen registriert.Der Unterschied besteht darin, dass Benutzernamen-basierte Konten als Lösegeld gehalten werden können, während E-Mail-basierte Konten sie nur registrieren
Eine Sache zu beachten: Ich möchte lieber meinen Benutzernamen als meine E-Mail-Adresse aufzählen lassen.(Aus Sicht der Privatsphäre - denken Sie an Ashley Madison).
E-Mails werden hauptsächlich aus praktischen Gründen als Anmeldungen verwendet (die Benutzer erinnern sich besser an ihre E-Mails als an 20 verschiedene Benutzernamen). Sie erleichtern jedoch das Erraten von Benutzernamen, insbesondere wenn Sie über eine große Datenbank verfügen (z. B. aufgrund eines der vielen Lecks)Es ist jedoch ein guter Rat, den Anzeigenamen vom Anmeldenamen zu trennen.
Mark Stewart
2016-05-17 05:47:32 UTC
view on stackexchange narkive permalink

Wenn ich aus Sicht der Benutzeroberfläche / Benutzerfreundlichkeit bereits drei Schritte unternommen habe (E-Mail, Telefon / Recaptcha), verringert dies die Wahrscheinlichkeit eines Maschinenangriffs, und weitere Straßensperren verringern die Anzahl der Personen, die dies möchten Melden Sie sich an, aber geben Sie frustriert auf. Es macht mir persönlich überhaupt nichts aus, wenn ich versuche, MarkyMark zu wählen (Nein, ich bin nicht der Rapper), und wenn ein anderer Möchtegern-Rapper diesen Namen verwendet hat, wäre ich weitaus lieber Lassen Sie mich auf der Website mitteilen, dass MarkyMark bereits verwendet wird (und bieten Sie, wie andere vorgeschlagen haben, auch die Möglichkeit an, sich als MarkyMark anzumelden, falls ich nur vergessen habe, dass ich mich bereits 3 Jahre registriert habe vor), und wenn die Site dann vorschlägt, ich versuche MarkyMark345 oder MarkyMarkyMark - das verrät nicht unbedingt, dass es MarkyMark1 bis MarkyMark344 wird bereits verwendet. Ich schätze die Vorschläge. Sobald eine Site MarkyMark78 vorgeschlagen hat und ich MarkyMark77 ausprobiert habe, war erfolgreich.

Ohne eine weitere Captcha-on-Try-Schwelle ist OP zu diesem Zeitpunkt immer noch der Ernte von Benutzernamen ausgesetzt, oder?
Wahrscheinlich;aber wenn jemand so entschlossen / geduldig ist, wird er alles versuchen;Wie alles andere ist es ein Kompromiss zwischen nervigen Kunden und vereitelnden Crackern.
Gestatten Sie mir eine Umformulierung: Wenn ich eine Brenner-E-Mail-Adresse und ein Brennertelefon habe und OP keine weitere Captcha-on-Try-Schwelle hat, kann ich jetzt seine gesamte Benutzernamenliste mit 5 Minuten Nachweis von I erntenIch bin ein Mensch und wie lange es dauert, eine Maschine einzurichten, um den Rest zu erledigen.
Tom
2016-05-17 14:15:24 UTC
view on stackexchange narkive permalink

Das Auflisten von Benutzernamen ist eine Bedrohung, da die Kombination aus Benutzername und Kennwort einem Angreifer Zugriff auf das Konto / System gewährt.

Wie viel einer Bedrohung von Ihrer abhängt System. In einem Forum, in dem der Benutzername ohnehin an jeden Beitrag angehängt ist, ist diese Bedrohung beispielsweise sehr gering. Wenn Sie sichere Kennwörter erzwingen, wird die Bedrohung verringert.

In Ihrem Szenario wäre die Aufzählung aufgrund all der Daten, die Sie vor diesem Schritt überprüft haben, unglaublich kostspielig. Hören Sie also auf, Ihr Gehirn zu ficken, und gehen Sie einfach voraus und sagen Sie ihm "Benutzername genommen", mit Alternativen angeboten, wie von Mark Stewart vorgeschlagen.

svidgen
2016-05-19 03:01:41 UTC
view on stackexchange narkive permalink

Dies ist im Allgemeinen kein ernstes Problem , es sei denn, Ihre Benutzernamen sind E-Mail-Adressen, die das Spammen oder Phishing Ihrer Benutzer ermöglichen würden. (Oder auch potenziell , wenn Sie eine Messaging-API bereitstellen.)

Das heißt , wenn Sie der Meinung sind, dass der zugrunde liegende Benutzername ein Geheimnis sein muss: Let Neue Benutzer wählen einen Anzeigenamen , erlauben ihnen jedoch nicht, ihren zugrunde liegenden Benutzernamen auszuwählen. Bieten Sie stattdessen entweder OAuth an oder hängen Sie eine Zufallszahl oder ein Wort an ihren Anzeigenamen an Verwenden Sie diese Option, wenn Sie sich anmelden.

Und selbst dann, wenn Sie über eine Messaging-API verfügen, besteht die eindeutigere Schutzmaßnahme darin, sicherzustellen, dass Nachrichten eindeutig mit dem ursprünglichen Benutzernamen gekennzeichnet sind.

jmoreno
2016-05-17 20:35:43 UTC
view on stackexchange narkive permalink

Nun, das erste, was ich zu sagen habe, ist, was ich fast jedem sage, der Fragen zu Benutzername / Passwort stellt: hör auf damit . Verwenden Sie OpenID und verlassen Sie das Geschäft mit Benutzernamen / Kennwörtern.

Zweitens sollten Benutzernamen als Schutz vor Hash-Kollisionen und nicht als Sicherheit betrachtet werden - d. H. Zwei Personen mit demselben Kennwort. In einem Sicherheits-POV sollten Sie den Benutzernamen als eines der Elemente betrachten, die ein Angreifer bereits kennt, und nicht als zusätzliche Sicherheit.

Daher würde ich vorschlagen, E-Mail- und möglicherweise Telefonnummern sowie Benutzernamen zuzulassen, um einen zu identifizieren Konto, in dem sie OpenID entweder nicht verwenden können oder nicht (obwohl ich es wirklich erzwingen würde, indem ich meinen eigenen internen Anbieter als zweite App einrichte).

Schließlich, wenn Sie dies getan haben Um einen Benutzernamen zu erhalten, begrenzen Sie die Anzahl der Übermittlungen. Nehmen Sie sich mindestens zwei Sekunden Zeit, um die Antwort zurückzugeben, und verdoppeln Sie die Zeit für jeden Versuch. Sie müssen den gesamten Vorgang erneut durchlaufen, wenn die Sitzung abgebrochen wird, ohne einen Benutzernamen auszuwählen.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...