Anmelden

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.

Aus unseren eigenen Prüfungen: 78 % der untersuchten Websites weisen diesen Befund auf (Grundlage: 9.557 geprüfte Websites). Zur vollständigen Auswertung

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

← Alle Befunde im Überblick

Prüfen Sie Ihre eigene Website – kostenlos, ohne Anmeldung, in etwa einer Minute.

Website jetzt prüfen

Stand: · Herausgeber: PynkSoft Web Scanner · Die Angaben sind technische Hinweise und ersetzen keine Rechtsberatung.