CSP-Generator — Content Security Policy, mit markierten Fallstricken
CSP-Generator
Haken Sie Direktiven und Quellen an, und diese Seite stellt eine korrekte einzeilige Content-Security-Policy für Ihren Antwort-Header oder das <meta>-Tag zusammen — dazu die wichtigen Hinweise: welche Direktiven nie aufdefault-src zurückfallen, wann ein Hash oder Nonce unsafe-inline stillschweigend überstimmt und was strict-dynamic abschaltet. Ein eingebauter SHA-256/384/512-Hash-Generator verwandelt Inline-Skripte und -Stile in 'sha256-…'-Quellen. Alles läuft in Ihrem Browser; nichts wird hochgeladen.
Fetch-Direktiven — woher Inhalte stammen dürfen
Nicht angehakte Direktiven fehlen einfach in der Richtlinie; ein Haken ohne gewählte Quellen wird ignoriert. 'none' hebt die anderen Kästchen seiner Zeile auf. Das Feld zusätzliche Quellen nimmt eine kommagetrennte Liste entgegen: Hostnamen (cdn.example.com), Schemata (https:), Hashes und Nonces mit oder ohne Anführungszeichen.
Direktive
'self'
'none'
'unsafe-inline'
'unsafe-eval'
'strict-dynamic'
data:
blob:
zusätzliche Quellen
Dokument-Direktiven — was die Seite selbst tun darf
Diese vier fallen nicht auf default-src zurück: Sie wegzulassen bedeutet „keine Einschränkung“, daher setzt eine vollständige Richtlinie sie explizit.
Direktive
'self'
'none'
zusätzliche Quellen
Schalter, Nonce und Berichte
Skript-Nonce
report-uri
report-to
Richtlinie
Noch nichts erstellt. Haken Sie einige Quellen an und drücken Sie Richtlinie erstellen, oder laden Sie das OWASP-Basisbeispiel.
Hash-Generator für Inline-Skripte und -Stile
Fügen Sie den exakten Inhalt zwischen <script> und </script> (oder den Style-Block) ein — Byte für Byte, ohne führenden oder nachgestellten Zeilenumbruch — und wählen Sie einen Algorithmus. Das Ergebnis ist die Quelle 'sha256-…', die CSP 3 erwartet.
Die Hash-Ausgabe erscheint hier.
Nach Möglichkeit als Header ausliefern, nicht als Meta-Tag. Der Antwort-Header ist die vollständige CSP: frame-ancestors, report-uri und report-to funktionieren nur dort, und ein Header wird angewendet, bevor das erste Byte HTML geparst wird. Das Meta-Tag ist die Ausweichlösung für statische Dateien ohne Serverkonfiguration. Prüfen Sie die Header, die Ihre Seite tatsächlich sendet, im Prüfer für Sicherheitsheader, und zerlegen Sie rohe Antwortblöcke im HTTP-Header-Parser.
Selbsttest Führt den Generator gegen feste Zustände erneut aus: Reihenfolge der Quellen, gegenseitiger Ausschluss von 'none', die OWASP-Basiszeichenkette, Anführungszeichen bei Nonce und Hash, die Hinweise zu fehlendem Fallback für base-uri / form-action / frame-ancestors, unsafe-inline durch Nonce oder Hash überstimmt, Hinweise zu strict-dynamic, Namen der Report-Only-Header, Ausschlüsse für Meta-Tags, der Hash-Generator gegen unabhängig berechnete SHA-Vektoren sowie die Negativpfade. Nichts wird irgendwohin gesendet.
Was ist eine Content Security Policy?
In einem Satz: Eine CSP ist eine Positivliste, die der Server mit einer Seite schickt und die dem Browser genau sagt, woher Skripte, Stile, Bilder und Verbindungen stammen dürfen — so schlägt ein eingeschleustes Skript selbst dann fehl, wenn ein Angreifer HTML injiziert, weil seine Quelle nicht auf der Liste steht.
ja — eine nicht angehakte Direktive erbt default-src
Dokument-Direktiven
base-uri, form-action, frame-ancestors, sandbox
was die Seite selbst tun darf (eingebettet werden, Formulare absenden, relative URLs auflösen)
nein — jede muss explizit gesetzt werden
Berichte und Sonstiges
report-uri, report-to, upgrade-insecure-requests
wohin Verstoßberichte gehen und das Upgrade alter URLs
nein (sie sind keine fetch-Direktiven)
Die schärfsten Kanten, je ein Absatz
'unsafe-inline' gegen Hashes und Nonces. Enthält eine Direktive ein Nonce oder eine Hash-Quelle, sagt CSP 3, dass 'unsafe-inline'ignoriert wird — es bleibt nur für uralte Browser stehen. Deshalb bedeutet „wir haben ein Nonce hinzugefügt und unsafe-inline der Sicherheit halber behalten“ in Wahrheit, dass moderne Browser das Nonce durchsetzen. Der Generator markiert diese Kombination, damit es eine Entscheidung und kein Zufall ist.
strict-dynamic schaltet Ihre Positivliste ab. Mit strict-dynamic in script-src werden Host-Quellen, Schemata, 'self', 'unsafe-inline' und data: für Skripte alle ignoriert; nur Nonces und Hashes zählen, und Skripte, die sie laden, dürfen weitere Skripte laden. Es ist das moderne Muster für Loader-Skripte — macht aber den Rest der script-src-Liste dekorativ.
Meta-Tags sind zweitklassig.frame-ancestors, report-uri und report-to werden in <meta http-equiv> ignoriert. Der Generator zeigt, welche Teile Ihrer Richtlinie stillschweigend nicht greifen würden.
Häufige Fehler
Beginnen mit default-src * plus einer langen Liste von Ausnahmen. Gehen Sie umgekehrt vor: ein enges default-src 'self', dann nur die Direktiven erweitern, die es brauchen. Enge Richtlinien schlagen beim Testen laut fehl; weite Richtlinien schlagen stillschweigend auf ewig fehl.
script-src 'unsafe-inline' 'unsafe-eval' ausliefern und das Thema für erledigt halten. Eine solche Richtlinie blockiert fast nichts, was ein XSS-Angriff tun will. Versehen Sie Skripte mit Nonce oder Hash, fügen Sie strict-dynamic hinzu und lassen Sie report-only in der Produktion laufen, um Regressionen zu erkennen.
Vergessen, dass default-src nicht alles abdeckt.base-uri, form-action, frame-ancestors und sandbox haben keinen Fallback — die am häufigsten genannte Lücke in realen CSP-Einsätzen.
Zuerst im Durchsetzungsmodus testen. Betreiben Sie die Richtlinie eine Woche lang als Report-Only mit einem Collector, lesen Sie die Berichte und schalten Sie dann auf Durchsetzung um. Eine Richtlinie, die den Checkout bricht, ist schlimmer als gar keine Richtlinie.
Leerraum unterschiedlich hashen. Ein Hash deckt die exakten Bytes des Inline-Blocks ab; ein „hilfreicher“ Build-Schritt, der nachgestellte Zeilenumbrüche entfernt, ändert jeden Hash. Erzeugen Sie Hashes aus dem, was ausgeliefert wird, nicht aus dem Quelltext.
FAQ
Brauche ich default-src, wenn ich jede Direktive aufliste? Nein, aber es als Untergrenze zu behalten ist gute Praxis: Neue fetch-Direktiven in künftigen Browsern fallen dann auf Ihre Basislinie zurück statt auf „erlaubt“.
Was bewirkt upgrade-insecure-requests eigentlich? Es weist den Browser an, jede http://-URL, die die Seite laden würde — Bilder, Stile, Abrufe —, vor der Anfrage in https:// umzuschreiben. Es ist ein Migrationswerkzeug; der Endzustand sind Seiten ganz ohne http://-URL.
Nonce oder Hash? Ein Nonce, wenn Sie die Serverantwort kontrollieren (ein Zufallswert pro Antwort, im Header und in jedem Skript-Tag). Ein Hash, wenn das HTML statisch oder gecacht ist. Niemals ein statisches Nonce — ein Nonce, das sich nicht ändert, ist nur unsafe-inline mit zusätzlichen Schritten.
Warum wird meine Richtlinie ausgeliefert, aber Verstöße kommen nicht an? Prüfen Sie, ob Sie im Report-Only-Modus sind (nur Berichte), ob report-uri auf einen Collector zeigt, der POST annimmt, und ob Sie auch die Mechanik Reporting-Endpoints / Report-To gesetzt haben, die die moderne Direktive report-to benötigt.
Ersetzt eine CSP andere Schutzmaßnahmen? Nein. Sie ist eine Schicht: Behalten Sie das Escaping Ihrer Ausgabe bei, halten Sie Cookies hinter HttpOnly und Secure und behalten Sie HSTS. Der Prüfer für Sicherheitsheader auf dieser Website bewertet das gesamte Set.