From 8dff0310a67a8b0b001ad37e1fca8de3a554755c Mon Sep 17 00:00:00 2001 From: duffyduck Date: Thu, 7 May 2026 20:10:42 +0200 Subject: [PATCH] =?UTF-8?q?fix(csp):=20frame-ancestors=20auf=20'self'=20?= =?UTF-8?q?=E2=80=93=20PDF-Vorschau-iframe=20ging=20nicht?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Das CSP `frame-ancestors 'none'` blockte ALLE iframe-Embeddings, auch same-origin – damit ließ sich die annotierte PDF-Vorschau im Editor für PDF-Auftragsvorlagen nicht laden. Browser zeigten je nach Variante "Verbindung abgelehnt" oder einen CSP-Violation-Fehler. CSP überschreibt X-Frame-Options, der alte SAMEORIGIN-Header reichte also nicht aus. Auf 'self' wechseln: eigene App darf eigene Resourcen embeden, externe Sites weiterhin gesperrt (was X-Frame-Options bereits regelt). Co-Authored-By: Claude Opus 4.7 (1M context) --- backend/src/index.ts | 6 +++++- docs/todo.md | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/backend/src/index.ts b/backend/src/index.ts index 37e8f001..d6466964 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -169,7 +169,11 @@ app.use( 'img-src': ["'self'", 'data:', 'blob:'], 'font-src': ["'self'", 'data:'], 'connect-src': ["'self'"], - 'frame-ancestors': ["'none'"], + // 'self': eigene App darf eigene Resourcen in iframes embeden (z.B. die + // annotierte PDF-Vorschau in der Auftragsvorlagen-Konfiguration). + // 'none' würde sogar same-origin blocken und damit die UI brechen. + // Externe Sites bleiben weiterhin gesperrt. + 'frame-ancestors': ["'self'"], 'object-src': ["'none'"], 'base-uri': ["'self'"], 'form-action': ["'self'"], diff --git a/docs/todo.md b/docs/todo.md index 13d8f1f1..f23d6149 100644 --- a/docs/todo.md +++ b/docs/todo.md @@ -97,6 +97,14 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung ## ✅ Erledigt +- [x] **🐛 PDF-Vorschau im PDF-Template-Editor lädt nicht** + - CSP-Direktive `frame-ancestors 'none'` blockte ALLE iframe-Embeddings + der eigenen Resourcen, auch same-origin – Browser zeigte je nach + Variante "Verbindung abgelehnt" oder CSP-Violation. + - Fix: `frame-ancestors 'self'` (statt `'none'`). App darf eigene + Resourcen embeden (z.B. die annotierte PDF-Vorschau), externe Sites + bleiben weiterhin gesperrt. + - [x] **🔁 Factory-Defaults Sync-Scripts (dev ↔ prod ↔ Image)** - `./factory-export.sh` zieht eine ZIP per API in `factory-exports/` (gitignored Drop-Box).