Bremse gegen Passwortraten

Nach fuenf Fehlversuchen wird eine E-Mail-Adresse gesperrt, erst eine
Minute, dann doppelt so lang, hoechstens 15 Minuten. Gezaehlt wird je
Adresse, auch fuer unbekannte - sonst verriete die Sperre, welche Konten
es gibt. Waehrend der Sperre kommt auch das richtige Passwort nicht durch.

Jeder Versuch zaehlt sofort und wird bei Erfolg zurueckgenommen. Zwischen
Sperrpruefung und Zaehlen liegt damit kein await; gleichzeitige Anfragen
kommen so nicht alle an der Sperre vorbei.

Der Zaehler liegt im Speicher des einen Prozesses. Ein Neustart setzt ihn
zurueck - der Notausgang, falls sich das einzige Ausbilderkonto aussperrt.
Beim Aufraeumen wird eine laufende Sperre nie verdraengt.

Die Containerabnahme prueft die Sperre im laufenden Abbild. Das
Abnahmeprotokoll ist gegen diesen Stand neu erzeugt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Florian Wilde
2026-10-04 18:25:04 +02:00
co-authored by Claude Opus 5.5
parent 5fbf1ac4de
commit 31d7779f45
9 changed files with 300 additions and 8 deletions
+22
View File
@@ -471,3 +471,25 @@ Der Grund ist banal und war ein echter Fehler: Wer die dunkle Fassung
eingestellt hatte, druckte schwarze Flächen. Eine einzelne Regel für `body`
genügt nicht, weil die Karten, Ränder und Marken ihre Farben aus Merkmalen
beziehen.
## E42 · Bremse gegen Passwortraten im Speicher, je E-Mail-Adresse
Nach fünf Fehlversuchen wird eine Adresse gesperrt, erst eine Minute, dann
jeweils doppelt so lang, höchstens 15 Minuten. Eine Stunde ohne Fehlversuch
oder eine erfolgreiche Anmeldung setzt den Zähler zurück.
- **Je Adresse, nicht je Konto.** Auch eine Adresse, die es nicht gibt, wird
gesperrt. Sonst verriete die Sperre, welche Konten existieren (E6).
- **Nicht je IP-Adresse.** Hinter dem Reverse Proxy käme die Adresse aus
`X-Forwarded-For`, und darauf ist nur Verlass, wenn der Proxy richtig
eingestellt ist. Bei einer Handvoll Konten lohnt das Durchprobieren vieler
Konten mit wenigen Passwörtern ohnehin nicht.
- **Obergrenze 15 Minuten.** Wer die Adresse des Ausbilders kennt, soll ihn
nicht für Stunden aussperren können.
- **Im Speicher, nicht in der Datenbank.** Es läuft genau ein Prozess. Ein
Neustart setzt die Zähler zurück – das kann ein Angreifer nicht auslösen,
der Betreiber aber schon, wenn er sich selbst ausgesperrt hat
(`docker compose restart lernbar`).
- **Gezählt wird vor der Prüfung.** Jeder Versuch gilt sofort als Fehlversuch
und wird bei Erfolg zurückgenommen. Zwischen Sperrprüfung und Zählen liegt
so kein `await`; sonst kämen gleichzeitige Anfragen alle an der Sperre vorbei.