Das Sicherheitsteam schließt eine Prüfung mit einer klaren Empfehlung ab: Führen Sie eine strenge Richtlinie zur Inhaltssicherheit ein. Der Entwickler fügt den Header an einem Freitagnachmittag der Produktion hinzu. Zwanzig Minuten später lädt der Stripe-Checkout nicht mehr, Google Tag Manager ist stumm und das Admin-Backoffice zeigt eine leere Seite an. Rollback des Headers, angespannte Obduktion, Versprechen, „später fortzufahren“ – was nie wird.
Ein gut geführter CSP ist kein Schalter. Dies ist eine ausführbare Whitelist: Der Browser führt nur das aus, was Sie explizit für Skripte, Stile, Bilder, XHR-Verbindungen und Iframes zulassen. Jeder Marketingpixel, jedes Webpack-Bundle, jeder Zahlungs-Iframe zählt – auch der, den seit der letzten Kampagne niemand mehr inventarisiert hat.
Der korrekte Build erfolgt im reinen Berichtsmodus, mit Marketing in the Loop, einer Nonce-Pipeline auf der Build-Seite und einem vollständigen Checkout-Test vor dem Wechsel zur Durchsetzung. Ohne sie bestrafen Sie den Korb und nicht den XSS-Angreifer.
Rollout in vier Phasen
Phase 1 – Bestandsaufnahme: Listen Sie alle Skripte und Stile auf, einschließlich der vom Tag Manager eingefügten, A/B-Tests, Chat-Unterstützung, Heatmaps. Exportieren Sie Verstöße aus dem Browser (Registerkarte „Netzwerk“ + Konsole) auf kritischen Pfaden: Empfang, Registrierung, Kasse, Admin.
Phase 2 – Report-Only zwei bis vier Wochen: Header „Content-Security-Policy-Report-Only“ mit Endpunkt „/csp-report“ oder Drittanbieterdienst. Sammeln, aggregieren nach verletzter Direktive, sortieren: zuerst „script-src“, dann „connect-src“, „frame-src“, „img-src“.
Phase 3 – Korrekturen: Nonce pro Abfrage für legitime Inline-Snippets, SHA-256-Hash für statische Snippets, Refactoring auf externe Dateien für den Rest. Jede neue Marketingdomäne durchläuft ein CSP-Ticket, bevor das Tag in Produktion geht.
Phase 4 – Durchsetzung mit Überwachung: Wechseln Sie zur „Content-Security-Policy“, wenn kritische Verstöße an sieben aufeinanderfolgenden Tagen gegen Null tendieren. Planen Sie einen dokumentierten Rollback-Header (Feature-Flag oder Nginx-Konfiguration) und einen E2E-Checkout-Test in der Staging-Erzwingung vor der Produktion.
Richtlinien und häufige Fallstricke
| Richtlinie | Rolle | Lauffalle |
|---|---|---|
default-src | Rückfall | Zu freizügig verbirgt Lücken in script-src |
script-src | JavaScript | Vergessen Sie js.stripe.com oder GTM |
style-src | CSS | Inline React/Vue ohne Nonce |
connect-src | fetch/XHR | Zahlungs- oder Analyse-API vergessen |
frame-src | Iframes | 3-D Secure Stripe blockiert |
img-src | Bilder | Pixelverfolgung auf unbekannter Domain |
„Streng-dynamisch“ mit Nonce modernisiert die Vertrauenskette: Ein Nonce-Skript kann Nachkommen laden – testen Sie Safari und Firefox als Ziel, nicht nur Chrome.
„unsafe-inline“ und „unsafe-eval“ sind nur in kurzen, dokumentierten Übergängen akzeptabel. Für jedes Vorkommen muss ein Entfernungsdatum angegeben werden.
Pipeline-Nonce und Build
Das Framework generiert eine Nonce pro Anfrage (Sitzung oder Middleware). Die Vorlage fügt „<script nonce="{{nonce}}">` ein. Das Build-Tool behält den Platzhalter bei – die Minimierung sollte ihn nicht zerstören.
Berechnen Sie für unveränderliche Inline-Inhalte (Snippet Analytics Legacy) den SHA-256-Hash und deklarieren Sie „sha256-…“ in „script-src“. Dokumentieren Sie den Build-Befehl in der Operations-README-Datei.
CI-Staging: Automatisierter Test, ob der CSP-Header vorhanden ist und ob die Checkout-Seite ohne Konsolenverletzung geladen wird. Blockieren Sie die Zusammenführung bei Regression.
Dritte: Stripe, GTM, Analytics
Stripe erfordert normalerweise „script-src“ js.stripe.com, „frame-src“hooks.stripe.com, „connect-src“ api.stripe.com. Listen Sie sie explizit auf – verlassen Sie sich nicht nur auf „default-src“.
Google Tag Manager verbreitet variable Domains: Erzwingen Sie einen „Neues Tag = CSP-Überprüfung“-Prozess mit 48-Stunden-SLA. Ansonsten bricht die Montagsaktion am Dienstag ab.
Führen Sie nach jeder Header-Änderung einen vollständigen Checkout-Lauf mit Testkarte, 3-D Secure (sofern aktiviert) und serverseitiger Webhook-Bestätigung durch.
Governance und Berichterstattung
Benennen Sie einen CSP-Eigentümer in der Sicherheits-RACI-Matrix – kein vages Komitee. Er nimmt an Tag-Marketing-Veröffentlichungen teil.
Wöchentliche Aggregation reiner Berichtsberichte: Volumen nach Direktive, neue Domains, zugewiesene Seiten. Spike nach der Bereitstellung = Rollback oder Hotfix, keine Stille.
DSGVO: CSP-Berichte können URLs mit Parametern enthalten – vor der langfristigen Speicherung filtern oder anonymisieren.
Entscheide dich und gehe ohne blinden Fleck voran
- Skript- und Stilinventar – Build, Inline, Tag Manager, Stripe; Eigentümer CSP im RACI genannt.
- Nur Bericht 2–4 Wochen – Endpunkt-„/csp-report“-Rate begrenzt, wöchentliche Skript-SRC-Triage.
- Pipeline-Nonce oder CI-Hash – Staging vor Produktion erzwingen; Test-Checkout und WordPress-Administration.
- Neues Tag-Marketing-Formular – Skript-/Connect-/Frame-Domains werden 48 Stunden vor der Veröffentlichung überprüft.
- Scorecard-Durchsetzung – keine kritischen Verstöße 7 Tage, dokumentierter Rollback-Header.
Front und CDN: Header über curl -I prüfen; Vergleichen Sie Hosts über das Verzeichnis und den Komparator.
Häufig gestellte Fragen
CSP blockiert was genau?
Es begrenzt ausführbare Quellen (Skripte, Stile, Verbindungen, Frames), um die Auswirkungen einer XSS-Injektion zu reduzieren. Der Browser lehnt alles ab, was nicht auf der Whitelist steht – einschließlich eines vergessenen Marketing-Pixels.
Reicht Report-Only für lange Zeit?
Nein: Dies ist die Inventurphase (mindestens 2–4 Wochen). Verstöße sollten auf kritischen Pfaden gegen Null gehen, bevor sie in der Produktion durchgesetzt werden.
Wie verwalte ich Inline-Skripte?
Drei Möglichkeiten: eindeutige Nonce pro vom Framework injizierter Anfrage, SHA-256-Hash von statischen Inhalten oder Refactoring für externe Dateien. „unsafe-inline“ ist nur bei kurzen Übergängen akzeptabel.
Existieren Stripe und Tag Manager neben CSP?
Ja, mit „script-src“ und „connect-src“ werden js.stripe.com, GTM-Domänen und Zahlungs-APIs aufgelistet. Testen Sie den vollständigen Checkout nach jeder Header-Änderung.
Lesen Sie zwei Wochen lang CSP-Berichte, bevor Sie ein Verbot verhängen – Überraschungen kommen vom Marketing, nicht vom Backend.
