Schützt die API gegen Spam, Bot-Traffic und Missbrauch durch zu viele Anfragen in kurzer Zeit.
src/security/ratelimiter.phpstorage/rate_limit/sha256(key).json verwendetflock(LOCK_EX) je Key-DateiIn config/app.local.php:
rate_limit.enabled
Globaler Schalter (true/false). Bei false lässt der Limiter alle Requests durch.rate_limit.requests
Maximal erlaubte Requests pro Zeitfensterrate_limit.window_seconds
Länge des Zeitfensters in SekundenDefault:
enabled = truerequests = 30window_seconds = 300 (5 Minuten)POST /api/request-otp.php
otp-request:{ip}:{email}POST /api/verify-otp.php
otp-verify:{ip}:{email}POST /api/load-draft.php
load:{ip}:{email}POST /api/save-draft.php
save:{ip}:{email}POST /api/submit.php
submit:{ip}:{email}POST /api/reset.php
reset:{ip}:{email}POST /api/upload-preview.php
preview-upload:{ip}:{email}POST /api/delete-upload.php
delete-upload:{ip}:{email}Hinweis: Jeder Endpunkt hat einen eigenen Prefix und damit ein separates Limit-Fenster.
Aktive Konfiguration (config/app.local.php):
enabled = truerequests = 30window_seconds = 300 (5 Minuten)Daraus ergibt sich pro Rate-Limit-Bucket (Key = prefix + ip + email):
30 Requests360 Requests8.640 RequestsDa aktuell 8 Endpunkte getrennte Buckets nutzen, ist der theoretische Gesamtwert über alle Endpunkte (gleiche IP + E-Mail) entsprechend:
240 Requests2.880 Requests69.120 RequestsAPI antwortet mit HTTP 429 und einer Fehlermeldung (z. B. „Zu viele Anfragen“).
storage/rate_limit/ sind normal.requests senken oder window_seconds erhöhen.requests erhöhen oder window_seconds senken.submit härter setzen (ggf. zukünftig endpoint-spezifische Limits einführen).