← Alle Checks
SicherheitTypische Schwere: Mittel

Scanner für schwache CSP

Erkennt unsichere Direktiven wie 'unsafe-inline' oder 'unsafe-eval', die den XSS-Schutz deiner CSP schwächen.

Was es prüft

Dieser Scanner analysiert deine Content-Security-Policy auf unsichere Direktiven wie unsafe-inline oder unsafe-eval. Diese Optionen lockern die Richtlinie so stark, dass sie dich nicht mehr wirksam schützt. Der Scanner prüft nur, wie die CSP definiert ist, er schreibt sie nicht um.

Warum es wichtig ist

Eine CSP mit diesen Direktiven stoppt die Script-Injection-Angriffe (XSS), die sie eigentlich blockieren soll, kaum. Sie vermittelt ein falsches Gefühl von Sicherheit: Es sieht so aus, als wärst du geschützt, aber der Schutz ist hohl. Ein Angreifer, der Code einschleust, kann ihn problemlos ausführen.

Wie man es behebt

Entferne unsafe-inline und unsafe-eval aus deiner Richtlinie und ersetze sie durch einen auf Nonces oder Hashes basierenden Ansatz für die Skripte, die du wirklich brauchst. Fang mit einer strengen Richtlinie an und erlaube nur das Nötigste. Teste die Änderungen sorgfältig, denn eine schlecht abgestimmte CSP kann legitime Funktionen kaputt machen.

Wie diese Prüfung funktioniert

Diese Prüfung greift nur, wenn deine Website bereits einen Content-Security-Policy-Header sendet; fehlt er, meldet das der Header-Scanner. Scanaris liest die komplette Richtlinie und sucht die zwei Wörter, die sie aushöhlen: 'unsafe-inline', das jedes direkt ins HTML geschriebene Skript oder Style ausführen lässt, und 'unsafe-eval', das erlaubt, mit eval und Verwandten Text in Code zu verwandeln. Taucht eines davon auf, öffnet es einen Fund mit niedrigem Schweregrad und der Liste der gefundenen Schwächen. Niedrig, weil eine unvollkommene CSP immer noch besser ist als keine, aber der Schutz gegen Skript-Injektion, der Daseinszweck der CSP, ist damit fast aufgehoben.

Warum es wichtig ist

Eine strikte CSP sorgt dafür, dass der Browser ein <script> selbst dann nicht ausführt, wenn ein Angreifer es in deine Seite bekommt (über einen unbereinigten Kommentar, einen gespiegelten Parameter oder eine kompromittierte Bibliothek). Mit 'unsafe-inline' in script-src läuft dieses injizierte Skript trotzdem: Der Header ist da, das Schloss wirkt geschlossen, aber die Tür steht offen. Wo das Wort steht, ist entscheidend: in script-src ist es ernst; in style-src ein viel kleineres Risiko, das viele Websites wegen ihrer Inline-Styles in Kauf nehmen.

Wie du es behebst

1. Nonces für Inline-Skripte

Ein Nonce ist ein bei jeder Anfrage anderer Zufallswert, den du in den Header und in jedes legitime <script>-Tag setzt. Der Browser führt nur Skripte mit diesem Wert aus; ein injiziertes Skript kennt ihn nicht.

Content-Security-Policy: script-src 'nonce-R4nd0m' 'strict-dynamic'; object-src 'none'; base-uri 'self'

Next.js erledigt das in der Middleware, die den Nonce erzeugt und an Header und Komponenten weitergibt; Nuxt mit einem Server-Plugin, das ihn in jede Antwort injiziert (so macht es Scanaris); Express mit einer Middleware, die ihn in res.locals ablegt und in den Templates ausgibt.

2. Hashes für feste Skripte

Ändert sich ein Inline-Skript nie, berechne seinen SHA-256-Hash und trag ihn in die Richtlinie ein: 'sha256-…'. Das funktioniert für kleine Schnipsel, etwa den eines Tag-Managers, ohne Nonces aufzusetzen.

3. Code in Dateien verschieben

onclick="…"-Handler und Skriptblöcke im HTML sind der übliche Grund, 'unsafe-inline' zu brauchen. Verschieb sie in .js-Dateien von deiner Domain, und der Bedarf verschwindet.

4. unsafe-eval entfernen

Meist verlangt es eine alte Bibliothek oder der Entwicklungsmodus eines Frameworks, der in die Produktion gerutscht ist. Prüf in der Browser-Konsole, was es anfordert, und aktualisiere oder ersetze dieses Teil.

5. Im Report-Modus ausrollen

Veröffentliche die neue Richtlinie zuerst als Content-Security-Policy-Report-Only mit einer report-to- oder report-uri-Direktive auf einen eigenen Endpunkt. Sammle ein paar Tage, was sie blockieren würde, justiere nach, und wenn die Berichte sauber sind, stell auf den blockierenden Header um.

Prüf, ob es behoben ist

curl -sI https://deinedomain.com | grep -i "content-security-policy"

In script-src darf weder 'unsafe-inline' noch 'unsafe-eval' stehen. Surf danach mit offener Konsole durch deine Website: Jede Blockierung erscheint dort mit der verursachenden Direktive. Die ganze Theorie steht in HTTP-Sicherheits-Header für Menschen erklärt.

Häufige Fragen

Ich nutze Tailwind oder Inline-Styles. Muss ich unsafe-inline aus style-src entfernen?

Wünschenswert, aber nicht dringend. Inline-Styles führen keinen Code aus. Priorisiere script-src; eine Richtlinie mit 'unsafe-inline' nur in style-src schützt vor dem, was zählt.

Google Tag Manager oder ein Support-Chat zwingen mich, die Richtlinie zu lockern.

Fast alle haben eine CSP-Dokumentation: Sie akzeptieren einen Nonce oder veröffentlichen die nötigen Hashes und Domains. Nimm ihre Origins in script-src und connect-src auf, statt alles zu öffnen.

Macht die CSP meine Website kaputt?

Nur, wenn du sie ohne Test auf Blockieren stellst. Dafür gibt es den Report-Modus: Er zeigt dir, was kaputtginge, ohne es kaputtzumachen.

Prüf es auf deiner Website

Scanne deine Website kostenlos und sieh, ob dieser und 44 weitere Checks bestehen, mit einem Fix-Prompt für jedes Problem.

Meine Website kostenlos scannen

Aus dem Blog

Verwandte Checks