Code: ja · Geprüft: ja (Unit-Tests csrf, rate-limit-ip, session, turnstile-widget) · Gemergt: ja · Produktiv: ja (im Build sha-0d254db enthalten, laut Cluster-Abfrage 2026-10-16 live)
Stand: 2026-10-16 (Quelle: git origin/main 35e7c84, Cluster-Abfrage nur lesend am 2026-10-16, Session-Status, Memory)
## Ziel
Der öffentliche Shop widersteht Bots, Credential-Stuffing, gefälschten Headern und direkten Zugriffen am CDN vorbei.
## Umgesetzt
- [x] CSRF-Schutz, Logout-Optimierung und CSRF-Origin-Prüfung hinter Reverse-Proxy (`4d3100e`, `d03cada`, `abdebfc`)
- [x] Cloudflare Turnstile an allen öffentlichen Formularen (`33580b3`, `cbc81ca`, `368985c`)
- [x] Sessions: kein Akzeptieren fremder Token-Zwecke, SSO umgeht Admin-2FA nicht mehr (`3e81896`, `2bbb38c`)
- [x] Rechnungsablage kann nicht ins öffentliche Upload-Verzeichnis geraten (`6135c1f`)
- [x] Rate-Limits je Besucher statt je Cloudflare-Edge, IPv6 je /64 (`946745c`, `5a8ff27`)
- [x] Client-IP-Ermittlung gehärtet (CF-Connecting-IP nur von Cloudflare-Edges, `0d254db`), produktiv als Build sha-0d254db (`63d90ae`)
- [x] Ingress nur über Cloudflare erreichbar, Middleware `wabenhain-cloudflare-only` (`97f0e03`; Middleware im Cluster vorhanden)
- [x] Image per Tag und Digest gepinnt, Container ohne Root, ohne Capabilities, seccomp RuntimeDefault (`dfa5c97`, `k8s/05-app-deployment.yaml`)
- [x] NetworkPolicies `default-deny-ingress`, `allow-same-namespace`, `allow-from-traefik` im Namespace (Cluster-Härtung 2026-10-12, nicht im Repo)
- [x] Abhängigkeiten: 14 Schwachstellen geschlossen (`c50e5e0`), High/Critical-Advisories geschlossen (`835323e`, noch nicht ausgerollt, siehe #20)
## Offen
- [ ] Rate-Limiter liegt im Prozessspeicher, deshalb nur eine Replica; gemeinsamer Store gehört zu #30
## Grundlage
README, Abschnitt „Sicherheit“; `src/lib/rate-limit.ts`, `src/proxy.ts`, `k8s/06-ingress.yaml`.
## Status
Code: ja · Geprüft: ja (Unit-Tests csrf, rate-limit-ip, session, turnstile-widget) · Gemergt: ja · Produktiv: ja (im Build sha-0d254db enthalten, laut Cluster-Abfrage 2026-10-16 live)
Stand: 2026-10-16 (Quelle: git origin/main 35e7c84, Cluster-Abfrage nur lesend am 2026-10-16, Session-Status, Memory)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Ziel
Der öffentliche Shop widersteht Bots, Credential-Stuffing, gefälschten Headern und direkten Zugriffen am CDN vorbei.
Umgesetzt
4d3100e,d03cada,abdebfc)33580b3,cbc81ca,368985c)3e81896,2bbb38c)6135c1f)946745c,5a8ff27)0d254db), produktiv als Build sha-0d254db (63d90ae)wabenhain-cloudflare-only(97f0e03; Middleware im Cluster vorhanden)dfa5c97,k8s/05-app-deployment.yaml)default-deny-ingress,allow-same-namespace,allow-from-traefikim Namespace (Cluster-Härtung 2026-10-12, nicht im Repo)c50e5e0), High/Critical-Advisories geschlossen (835323e, noch nicht ausgerollt, siehe #20)Offen
Grundlage
README, Abschnitt „Sicherheit“;
src/lib/rate-limit.ts,src/proxy.ts,k8s/06-ingress.yaml.Status
Code: ja · Geprüft: ja (Unit-Tests csrf, rate-limit-ip, session, turnstile-widget) · Gemergt: ja · Produktiv: ja (im Build sha-0d254db enthalten, laut Cluster-Abfrage 2026-10-16 live)
Stand: 2026-10-16 (Quelle: git origin/main
35e7c84, Cluster-Abfrage nur lesend am 2026-10-16, Session-Status, Memory)