umbau 1.0
This commit is contained in:
@ -11,6 +11,8 @@ from __future__ import annotations
|
||||
import time
|
||||
from collections import defaultdict, deque
|
||||
|
||||
from app.config import settings
|
||||
|
||||
|
||||
class SlidingWindowRateLimiter:
|
||||
def __init__(self, max_events: int, window_seconds: int) -> None:
|
||||
@ -29,6 +31,16 @@ class SlidingWindowRateLimiter:
|
||||
return True
|
||||
|
||||
|
||||
# Max. 10 Login-Versuche pro Minute und Quell-IP; ergaenzt den
|
||||
# Account-basierten Lockout in app/auth/routes.py.
|
||||
login_rate_limiter = SlidingWindowRateLimiter(max_events=10, window_seconds=60)
|
||||
# E8 (Umsetzungsauftrag Teil E): Werte konfigurierbar (settings.login_rate_
|
||||
# limit_*, siehe app/config.py) statt fest verdrahtet -- ergaenzt den
|
||||
# Account-basierten Lockout in app/auth/routes.py. ACHTUNG: greift pro
|
||||
# Quell-IP. Sitzen mehrere interne Benutzer hinter derselben NAT-Adresse
|
||||
# (typischer Buero-Fall), teilen sie sich dieses Budget; das ist eine
|
||||
# bewusste Betriebsentscheidung und muss zusammen mit dem nginx-limit_req
|
||||
# und der fail2ban-Schwelle (beide ebenfalls konfigurierbar, siehe
|
||||
# ansible/roles/nginx_proxy und ansible/roles/fail2ban) im Betriebshandbuch
|
||||
# festgehalten werden.
|
||||
login_rate_limiter = SlidingWindowRateLimiter(
|
||||
max_events=settings.login_rate_limit_max_events,
|
||||
window_seconds=settings.login_rate_limit_window_s,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user