From 0634d8c2366596f1c2712b2e1e72a579a6a240df Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 10 Jun 2026 13:42:13 +0200 Subject: [PATCH] fix(csp): Inline-Skripte in Prod erlauben (Next.js-Hydration) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Prod-CSP hatte script-src 'self' ohne nonce/hash -> Next.js' Inline-Bootstrap-/ Hydration-Skripte wurden vom Browser blockiert (Login-Seite ohne JS, 'Connection closed'). script-src um 'unsafe-inline' ergänzt (KEIN 'unsafe-eval' in Prod); übrige CSP (default-src 'self', object-src none, frame-ancestors none, base-uri self, form-action self) bleibt strikt. Stärkere nonce-basierte CSP via Middleware als Hardening-Option offen. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/lib/security/headers.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/lib/security/headers.ts b/src/lib/security/headers.ts index d593462..701a04f 100644 --- a/src/lib/security/headers.ts +++ b/src/lib/security/headers.ts @@ -2,17 +2,19 @@ * Sicherheits-Header, eingehängt in next.config.ts. * * Content-Security-Policy ist der zentrale Querschnitts-Schutz (Implementierungs- - * plan Z.1314): in Produktion strikt mit default-src 'self', frame-ancestors 'none' - * und form-action 'self'. Im Dev-Modus benötigt Next.js (HMR/React-Refresh) eine - * gelockerte script-src/connect-src-Variante ('unsafe-eval' + ws: für den Dev-Socket). + * plan Z.1314): default-src 'self', frame-ancestors 'none', form-action 'self', + * object-src 'none'. script-src erlaubt 'unsafe-inline' (KEIN 'unsafe-eval' in + * Prod), da Next.js (App Router) Inline-Bootstrap-/Hydration-Skripte ohne Nonce + * ausliefert — eine strikte nonce-basierte CSP ginge nur über die Middleware + * (Hardening-Option). Im Dev zusätzlich 'unsafe-eval' + ws: (HMR/React-Refresh). */ const isProd = process.env.NODE_ENV === "production"; const CSP = [ "default-src 'self'", - // Dev braucht eval (React Refresh) + inline; Prod bleibt strikt. + // Next.js braucht Inline-Skripte (Bootstrap/Hydration, ohne Nonce); Dev zusätzlich eval. isProd - ? "script-src 'self'" + ? "script-src 'self' 'unsafe-inline'" : "script-src 'self' 'unsafe-eval' 'unsafe-inline'", "style-src 'self' 'unsafe-inline'", "img-src 'self' data: blob:",