it-swarm.com.de

Wie kann ich sicher überprüfen, ob ein Benutzername vorhanden ist?

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

Wenn der Nutzer an diesem Punkt angelangt ist, habe ich seine E-Mail-Adresse und eine Handynummer, die mit einem SMS] validiert ist, und er/sie hat Googles No CAPTCHA reCAPTCHA bestanden.

Ich muss ü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 ein Benutzername vorhanden ist?

41
frenchie

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 sind, fragen Sie sich möglicherweise, wie Sie Ihre Website vor solchen Angriffen schützen können. 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.

Möglicherweise habe ich jedoch etwas verpasst - ich bin auch neugierig, ob jemand anderes eine bessere Lösung hat.

40
Lukas

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

Wirklich, was passiert mit diesem System

  • Der Benutzer fordert ein neues Passwort an
  • Sie müssen jetzt die Passwö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. Sie tun dies, indem Sie überprüfen.


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

Dies ist das Szenario, mit dem Sie konfrontiert werden, und wie können Sie verhindern, dass jemand es böswillig verwendet. Welchem ​​Risiko öffnen Sie sich hier?

  • Ein Benutzer kann einen Benutzernamen herausfinden
  • Gibt immer noch keinen Zugriff, da sie jetzt das Passwort erraten müssen

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 machst du das?

Milderung 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 per IP protokollieren.

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 ein paar einfache Checks and Balances ausfü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 überprüfen.

  • Der Benutzer versucht sehr schnell, viele Konten zu registrieren: einen Bot, stoppen Sie sie und werfen Sie sie raus (Ratenbegrenzung)
  • Benutzer versucht viel: 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 dieser 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 persönlicher Informationen. Gut gemacht!

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 ein Konto nicht an eine E-Mail binden: 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, ihn 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).

18
Robert Mennell

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 anderes Problem ist:
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, sodass Sie nicht wissen, was Sie wann in das E-Mail-Textformular eingeben sollen Sie wissen, dass es den Benutzernamen helloman gibt. Jetzt besteht das Problem darin, dem Benutzer mitzuteilen, ob die E-Mail angenommen wurde.

Lösung - Sagen Sie ihnen bei der Registrierung nicht, ob die E-Mail genommen wurde, sondern 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, sich zu registrieren [email protected] ist nicht der echte Helloman, als er wahrscheinlich den E-Mail-Posteingang von Helloman nicht sehen wird. 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 password nicht als Passwort verwenden, sind auch die gängigsten E-Mail-Systeme heutzutage sehr sicher, also keine Sorge ( und wenn er sie gehackt hat, ist das nicht unser Problem (wenn Sie Ihren eigenen E-Mail-Server für Sie und Ihre Mitarbeiter einrichten).

9
MaxTheBackspace

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 gut zusammengefasst hier :

Als Angreifer werde ich es tun, wenn ich Ihre Login- oder Passwortseite verwenden kann, um meine Liste von 10000 Zielen auf 1000 Ziele einzugrenzen.

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 [email protected] auf Ashley Madison.com existiert.

Wenn Sie Benutzern erlauben, ihren eigenen Benutzernamen auszuwählen, der von ihrer E-Mail getrennt ist, sollten Sie sich grundsätzlich nur mit E-Mail/Passwort anmelden und einfach den Benutzernamen verwenden, um sich mit anderen Benutzern auf der Website zu identifizieren.

Auf diese Weise gibt es keine Sicherheitslücke, wenn gesagt wird, dass Benutzername foobar genommen wird, bitte wählen Sie eine andere 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 macht dies auch die Wiederherstellung des Kontos und die Anmeldung einfacher (was immer gut für die Sicherheit ist). 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 werden, 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 von Ihrer Seite über Ihre Gründe dafür festgestellt.)

3
SilverlightFox

Es gibt gute Antworten von @SilverlightFox und @MaxTheBackspace.

Ich möchte nur noch einmal eines klarstellen: Es sollte nicht standardmäßig an jedem Punkt in der Anwendung möglich sein, dass Benutzer eine (wahrscheinlich) globale eindeutige Kennung wie eine E-Mail-Adresse aufzählen 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.

1
Noir

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

Das heißt , wenn Sie der Meinung sind, dass der zugrunde liegende Benutzername ein Geheimnis sein muss: Lassen Sie neue Benutzer einen Anzeigenamen wählen , aber erlauben Sie ihnen nicht, ihren zugrunde liegenden Benutzernamen zu wählen. Bieten Sie stattdessen entweder OAuth) an oder fügen Sie eine Zufallszahl hinzu oder Word zu ihrem Anzeigenamen, der bei der Anmeldung verwendet werden soll.

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.

0
svidgen

Es kann eine bessere Vorgehensweise für den Anmeldevorgang sein, mit einer E-Mail und nicht mit einem Benutzernamen zu arbeiten. 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ß , dass Sie in einem Kommentar angegeben haben, dass Ihr Benutzer seine E-Mail-Adresse ändern soll, sodass Sie dies nicht zum Anmelden verwenden möchten Dies ist eine völlig akzeptable Vorgehensweise, um die Änderung der E-Mail-Adresse zu ermöglichen. Die Site, auf der Sie sich befinden, macht dies genauso.

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 zu erraten [email protected] über someguy. Und wenn der Angreifer 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, das nicht nur ein Passwort war.

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. Aber wenn 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
  • Es ist schwieriger, Informationen manuell zu erraten
  • Einfachere Erkennung von Missbrauch

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

0
Bacon Brad

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 Hindernisse verringern die Anzahl der Personen, die sich anmelden möchten frustriert aufgeben. 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 Rapper diesen Namen verwendet hat, hätte ich das weitaus lieber Auf der Website erfahren Sie, dass MarkyMark bereits verwendet wird (und wie andere vorgeschlagen haben, bieten Sie auch die Möglichkeit, sich als MarkyMark anzumelden, falls ich nur vergessen habe, dass ich mich bereits vor 3 Jahren registriert habe) Wenn die Site dann vorschlägt, ich versuche MarkyMark345 oder MarkyMarkyMark - das verrät nicht unbedingt, dass MarkyMark1 bis MarkyMark344 bereits verwendet werden. Ich schätze die Vorschläge. In der Tat, als eine Site MarkyMark78 Vorschlug und ich versuchte MarkyMark77 Und war erfolgreich.

0
Mark Stewart

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

Wie viel einer Bedrohung, die von Ihrem System abhängt. 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 überprüft haben, bevor er zu diesem Schritt gelangt, unglaublich kostspielig. Hören Sie also auf, Ihr Gehirn zu ficken, und sagen Sie ihm einfach "Benutzername genommen", wobei Alternativen angeboten werden, wie von Mark Stewart vorgeschlagen.

0
Tom