Frage

Ich versuche, eine verbesserte Passwort-Reset-Funktion für einen unserer öffentlich zugänglichen Websites zu schreiben und zusätzlich zu einem besseren captcha ich Flagge wollte einen Benutzernamen, die w / ohne Erfolg x Höhe der Zeit in unter y Minuten einzuloggen versucht . Der erste Gedanke war, eine Datenbank zu haben, die jeden Versuch anmeldet und dann nach dem maximalen Betrag von Versuchen in der Zeit -. Wir einfach das Konto sperren, bis ein Anruf von dem Mitarbeiter Manager empfangen wird zurückgesetzt

Was ist ein besserer Ansatz, der nicht Persistenz über SQL erfordert. (Cookie / etwas anderes?) Wenn man nicht vorhanden ist, wie kann ich tun dies mit einer saubereren Ansatz? aus irgendeinem Grund mein Gehirn voll heute

War es hilfreich?

Lösung

Überprüfen Sie diese Antwort über sie Drosselung.
Throttling Anmeldeversuche

Jeff Atwood hat eine interessante Blog-Post über das Thema, falls Sie neugierig ist.
http://www.codinghorror.com/blog/archives/001206.html

in einer Datenbank speichern kann langwierig, und Sie werden Ihre Tabelle zu überschwemmen mit fehlgeschlagener Anmeldeversuche am Ende besorgniserregend. Auch etwas auf dem Computer des Benutzers speichert, steuert diese auch heikel, weil sie die Kontrolle über alle Dateien auf ihrem Rechner haben, und sie konnten leicht Ihre fehlgeschlagene Login-Zähler zurückzusetzen, oder noch schlimmer, Sie fehlerhafte / schädliche Daten zurückschicken.

Andere Tipps

Cookies oder Sitzungen mit schlecht wäre, da ein Benutzer ihre Anmeldeversuche Cookies nur Ausräumen löschen kann. Vielleicht eine Datei in einem temporären Verzeichnis mit den Login-Versuchen zu speichern wäre angemessen?

Nun ein Cookie ist nicht sinnvoll gegen einen Angreifer (sie werden nur das Cookie löschen oder einfach nicht zu Ihnen). Wenn Sie In-Memory-Anwendung Zustand haben, können Sie in der Lage sein, das zu verwenden, aber ou haben wirklich vorsichtig sein, wie das zu tun könnte dazu führen Sie Ihr Gedächtnis wirklich schnell zu füllen, zusätzlich zu laufen in Skalierbarkeitsprobleme aufgrund Gleichzeitigkeit und Verriegelung. Und selbst könnte dies nicht auf einer App arbeiten, die auf vielen verschiedenen Servern ausgeführt wird, wie der Anwendungszustand wahrscheinlich nicht zwischen diesen Servern gemeinsam genutzt wird. Warum denken Sie, Daten in der Datenbank zu speichern ist eine schlechte Idee?

Sie können eine Datenbank verwenden, verwenden memcache und Setup ein Cron-Job in der Tabelle in regelmäßigen Abständen zu entleeren. Sie können auch Cookies oder Session-Variablen verwenden, aber ich würde nicht auf diese aus Sicherheitsgründen verlassen.

Bitte beachten Sie, dass das Ziel eines Crackers kein Zugriff auf Ihr System zu erlangen könnte sein, aber es unbrauchbar für alle zu machen. Er konnte vielleicht dies erreichen, indem gerne mit falschen Anmeldeinformationen Anmeldung bestimmte Benutzer von Ihrer Website zu blockieren! Ich denke, Sie werden keine adäquate Lösung ohne Datenbank finden.

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