Sicherheitshärtung: CSRF, Turnstile, Sessions, Rate-Limits, Client-IP, Cloudflare-only #8

Closed
opened 2026-10-16 05:58:35 +00:00 by Nick.Rosenloecher · 0 comments
Owner

Ziel

Der öffentliche Shop widersteht Bots, Credential-Stuffing, gefälschten Headern und direkten Zugriffen am CDN vorbei.

Umgesetzt

  • CSRF-Schutz, Logout-Optimierung und CSRF-Origin-Prüfung hinter Reverse-Proxy (4d3100e, d03cada, abdebfc)
  • Cloudflare Turnstile an allen öffentlichen Formularen (33580b3, cbc81ca, 368985c)
  • Sessions: kein Akzeptieren fremder Token-Zwecke, SSO umgeht Admin-2FA nicht mehr (3e81896, 2bbb38c)
  • Rechnungsablage kann nicht ins öffentliche Upload-Verzeichnis geraten (6135c1f)
  • Rate-Limits je Besucher statt je Cloudflare-Edge, IPv6 je /64 (946745c, 5a8ff27)
  • Client-IP-Ermittlung gehärtet (CF-Connecting-IP nur von Cloudflare-Edges, 0d254db), produktiv als Build sha-0d254db (63d90ae)
  • Ingress nur über Cloudflare erreichbar, Middleware wabenhain-cloudflare-only (97f0e03; Middleware im Cluster vorhanden)
  • Image per Tag und Digest gepinnt, Container ohne Root, ohne Capabilities, seccomp RuntimeDefault (dfa5c97, k8s/05-app-deployment.yaml)
  • NetworkPolicies default-deny-ingress, allow-same-namespace, allow-from-traefik im Namespace (Cluster-Härtung 2026-10-12, nicht im Repo)
  • 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)

## 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)
Nick.Rosenloecher added the art/technikprio/hochstatus/erledigt labels 2026-10-16 05:58:35 +00:00
Sign in to join this conversation.