Content-Security-Policy fehlt – was das bedeutet und wie Sie sie setzen
Der Header Content-Security-Policy legt fest, aus welchen Quellen ein Browser Skripte, Bilder und Stile laden darf. Fehlt er, akzeptiert der Browser alles – auch das, was ein Angreifer eingeschleust hat.
Was der Header macht
Eine Website lädt Dutzende Dateien: Skripte, Schriften, Bilder, Stile. Ohne Content-Security-Policy vertraut der Browser jeder Quelle, die im Seitenquelltext auftaucht. Gelingt es jemandem, eine einzige Zeile in Ihre Seite einzuschleusen – über ein Kommentarfeld, ein veraltetes Plugin, eine unsauber gefilterte Sucheingabe –, führt der Browser dessen Skript genauso bereitwillig aus wie Ihr eigenes.
Die Content-Security-Policy dreht das um: Sie benennen, was erlaubt ist, und alles andere wird blockiert. Damit wird aus einer erfolgreichen Einschleusung ein wirkungsloser Versuch.
Warum das zählt
Cross-Site-Scripting steht seit Jahren in der oberen Hälfte der OWASP-Liste der häufigsten Web-Schwachstellen. Die Content-Security-Policy ist die wirksamste Einzelmaßnahme dagegen – und eine der wenigen, die man nachträglich einbauen kann, ohne die Anwendung umzuschreiben.
Dazu kommt der Datenschutz: Die Richtlinie legt offen, welche fremden Quellen eine Seite überhaupt kontaktieren darf. Wer sie sauber setzt, weiß auch, welche Daten wohin abfließen – eine Frage, die Ihnen bei jeder DSGVO-Prüfung gestellt wird.
So setzen Sie sie
Beginnen Sie streng und lockern Sie gezielt. Für eine Seite, die alles selbst ausliefert:
Content-Security-Policy: default-src 'self'; img-src 'self' data:;
style-src 'self' 'unsafe-inline'; script-src 'self'; frame-ancestors 'self'
In Apache im virtuellen Host oder in der .htaccess:
Header always set Content-Security-Policy "default-src 'self'; img-src 'self' data:"
In nginx:
add_header Content-Security-Policy "default-src 'self'; img-src 'self' data:" always;
In PHP, bevor irgendetwas ausgegeben wird:
header("Content-Security-Policy: default-src 'self'");
Die typische Stolperfalle
Eine zu strenge Richtlinie zerlegt die eigene Seite: Karten, eingebettete Videos, Schriften von fremden Servern verschwinden wortlos. Testen Sie deshalb zuerst mit Content-Security-Policy-Report-Only – der Browser meldet dann in der Entwicklerkonsole, was er blockiert hätte, ohne etwas kaputtzumachen. Erst wenn dort nichts Wichtiges mehr auftaucht, schalten Sie scharf.
Zweite Falle: 'unsafe-inline' bei script-src. Das hebt den Schutz weitgehend wieder auf. Wenn Sie Inline-Skripte haben, arbeiten Sie mit nonce oder lagern Sie die Skripte in Dateien aus.
Häufige Fragen
Was ist die Content-Security-Policy?
Ein HTTP-Header, mit dem eine Website dem Browser mitteilt, aus welchen Quellen er Skripte, Bilder, Stile und andere Inhalte laden darf. Alles, was nicht erlaubt ist, wird blockiert.
Ist die Content-Security-Policy Pflicht?
Es gibt keine ausdrückliche gesetzliche Pflicht, sie zu setzen. Art. 32 DSGVO verlangt jedoch angemessene technische Maßnahmen zum Schutz personenbezogener Daten – bei einer Website mit Formularen oder Login gehört ein Schutz gegen eingeschleusten Fremdcode zum Stand der Technik.
Kann die Content-Security-Policy meine Seite zerstören?
Ja, eine zu strenge Richtlinie blockiert eigene Inhalte. Deshalb zuerst mit Content-Security-Policy-Report-Only testen: Der Browser meldet, was er blockieren würde, ohne es zu tun.
Weitere Befunde aus dem Bereich Sicherheit
Prüfen Sie Ihre eigene Website – kostenlos, ohne Anmeldung, in etwa einer Minute.
Website jetzt prüfen