Für meine eigenen Projekte habe ich eine verallgemeinerte 'floodcontrol'-Bibliothek geschrieben, die solche Dinge erledigt.
Es erlaubt mir zu spezifizieren, wie viele Versuche in X Zeit gemacht werden können.Es erlaubt in kurzer Zeit eine gewisse Anzahl von "Gnadenversuchen", so dass nur wirklich ungewöhnliches Verhalten abgefangen wird.
I Datensatz in der Datenbank ein paar Dinge:
- Die IP-Adresse (oder die ersten 24 Bits davon)
- Die Aktion, die (dh 'log in' versucht wurde, 'Suche', ‚Kommentar‘)
- die Zeit des Versuchs
- Anzahl der Versuche (Versuch Zähler)
Für jeden Versuch machten mir Abfrage für das Teil-IP hinzufügen Ress und die Aktion, und wenn ein vorheriger Versuch innerhalb eines bestimmten Zeitfensters unternommen wurde, inkrementiere ich den Versuchszähler für diesen Versuch. Wenn der Versuchszähler die erlaubte Anzahl an Grace-Versuchen überschreitet, überprüfe ich, ob der letzte Versuch innerhalb von X Sekunden stattgefunden hat, und wenn dies der Fall ist, gebe false zurück - daher wird die Aktion blockiert (und der Benutzer wird aufgefordert, X Sekunden zu warten, bevor er es versucht) nochmal). Wenn der Versuchszähler unter der Anzahl der Aktivierungsversuche liegt, gebe ich true zurück und lasse ihn gleiten.
Wenn eine Person mit der gleichen IP später kommt, wird die vorherige Anzahl der Versuche nicht abgerufen, weil es zu lange her ist.
@aradad: Ich wäre sehr verärgert, wenn ich jedes Mal ein Captcha bekommen würde, wenn ich mich einloggen wollte. Ich denke nicht, dass es angezeigt werden sollte, bis sie wie 3 Mal scheitern, und dann geben Sie ihnen vielleicht weitere 3 Versuche, bevor Sie sie für eine bestimmte Zeit aussperren. Captchas sind nicht unzerbrechlich von Maschinen ... nur schwieriger. Ich denke, dass mein Prof über 90% von em mit seinem Skript geknackt hat. – mpen