Brute-force - /DoS-Prävention in PHP

Ich versuche ein Skript schreiben, um zu verhindern, dass brute-force-login-versuche in eine website, die ich Baue. Die Logik geht ungefähr so:

  1. Benutzer sendet login-Daten.
  2. Überprüfen Sie, ob Benutzername und Passwort korrekt ist
    • Wenn ja, lassen Sie Sie in.
    • Wenn Nein, notieren Sie ein misslungener Versuch in der Datenbank. Überprüfen Sie, ob es zu viele nicht innerhalb einer bestimmten Frist (zB: 5 in 5 Minuten):
      • Wenn ja, dann pause Ausführung für 10 Sekunden: sleep(10), dann melden login failure an den Benutzer.
      • Bericht einen login failure an den Benutzer sofort

Erklären dieses zu einem co-worker, ich wurde gefragt, wie dies helfen würde, wenn ein hacker gesendet, sagen wir, 1000 Anfragen in der Sekunde. Würde die ersten 5 würden sofort zurückkehren, und dann die restlichen 995 alle nehmen nur 10 Sekunden?

Ich habe den leisen Verdacht, dass ich nicht vollständig verstehen, wie HTTP funktioniert - ist, dass die situation oben noch möglich, oder gibt es eine Begrenzung für die Anzahl der gleichzeitigen Anfragen, die ein server handhaben kann von einem client?

Würde eine bessere Lösung sein, um eine Erhöhung der Schlafzeit?

sleep($numRequestsInLast5Minutes - 5)

Also die ersten 5 wäre schnell, und dann alle nachfolgenden steigern würde schlafen.

  • Statt der Einführung einer schlafen, warum nicht die Einführung eines captcha nach einer maximal zulässigen fehlgeschlagenen login-versuche?
InformationsquelleAutor nickf | 2009-11-13
Schreibe einen Kommentar