- CF-Connecting-IP gilt nur noch als oeffentliche Unicast-Adresse
(nicht 0/8, 10/8, 100.64/10, 127/8, 169.254/16, 172.16/12,
192.168/16, 240/4, Broadcast, ::, ::1, fc00::/7, fe80::/10,
::ffff:privat); sonst gilt die Gegenstelle.
- X-Real-IP ohne X-Forwarded-For nur noch ausserhalb von Produktion;
in Produktion ergibt das "unknown".
- Neuer Helfer headersWithClientIp, von withClientIp und der
Admin-Session-Pruefung genutzt: ein vom Client gesendeter
x-artista-client-ip-Wert wird nie geglaubt.
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
consumeRateLimit bekommt IPv6-Adressen als /64-Praefix (rateLimitSubject):
ein Anschluss hat meist ein ganzes /64 und koennte sonst durch Adresswechsel
jedes Limit umgehen. better-auth bekommt weiter die einzelne Adresse und
normalisiert sie selbst auf /64 (ipv6Subnet, Standard 64).
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Traefik vertraut seit 2026-10-12 den weitergeleiteten Headern aus
Cloudflare-Netzen. Wer eine eigene Cloudflare-Zone auf den Server zeigen
laesst, konnte damit X-Real-IP und den ersten X-Forwarded-For-Eintrag
faelschen und die Rate-Limits (Buchung, Kontakt, Login, 2FA) umgehen.
- clientIp: Gegenstelle ist der letzte X-Forwarded-For-Eintrag (von Traefik
angehaengt); CF-Connecting-IP nur, wenn sie eine Cloudflare-Edge ist.
- better-auth liest nur noch x-artista-client-ip, den der Auth-Endpunkt
per withClientIp setzt (ein mitgeschickter Wert wird ersetzt).
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>