Kurz gesagt
Eine Content Security Policy sagt dem Browser, woher eine Seite Skripte und andere Inhalte laden darf. Richtig gebaut, stoppt sie die meisten eingeschleusten Skripte selbst dann, wenn die Anwendung eine Lücke hat. Viele Richtlinien schützen aber wenig, weil sie 'unsafe-inline' erlauben oder ganze Domains freigeben: Eine Google-Studie fand 2016 knapp 95 Prozent der untersuchten Richtlinien, die Skripte begrenzen sollten, wirkungslos. Wirksam ist eine strikte Richtlinie, bei der jedes erlaubte Skript eine Einmalkennung oder eine Prüfsumme trägt.
Was eine CSP tut
Einer der folgenreichsten Fehler von Websites ist Cross-Site-Scripting (XSS): Jemand schafft es, ein eigenes Skript in die Seite zu schreiben, und der Browser jedes Besuchers führt es aus. Die eigentliche Abwehr steckt im Code. Die Content Security Policy (CSP) ist die zweite Linie — sie weist den Browser an, nur bestimmte Skripte auszuführen und alle anderen zu ignorieren.
Die Richtlinie besteht aus Direktiven, jede für eine Art von Inhalt. Die wichtigsten:
Die strikte CSP
Statt aufzuzählen, woher Skripte kommen dürfen, markiert eine strikte Richtlinie die erlaubten Skripte selbst. Der Server erzeugt für jede Antwort eine neue Zufallszahl, die Nonce, schreibt sie in die Richtlinie und an jedes eigene script-Element. Ein eingeschleustes Skript kennt die Zahl nicht und wird nicht ausgeführt.
Content-Security-Policy: script-src 'nonce-t7Kf2Qm9XbR4pZ1wLs8nVg==' 'strict-dynamic'; object-src 'none'; base-uri 'none'
- Die Nonce muss bei jeder Antwort neu sein, zufällig und lang genug; die Spezifikation nennt mindestens 128 Bit. Eine Nonce, die sich wiederholt, schützt nicht.
- 'strict-dynamic' erlaubt Skripten, die schon vertrauenswürdig sind, weitere Skripte nachzuladen. Dafür ignoriert der Browser Adresslisten und 'self' in script-src. Ohne Nonce oder Hash blockiert 'strict-dynamic' dagegen fast alle Skripte. Der Preis: Erzeugt ein vertrauenswürdiges Skript neue Skripte aus Daten, die ein Angreifer beeinflussen kann, lässt die Richtlinie auch diese durch. Die Spezifikation rät deshalb, 'strict-dynamic' zu meiden, wo es ohne geht; web.dev empfiehlt es als Teil der strikten CSP, weil es die Einführung erleichtert.
- Steht neben einer Nonce oder einem Hash auch 'unsafe-inline', ignorieren heutige Browser es. So lässt sich für sehr alte Browser ein Rückfall eintragen, ohne den Schutz zu schwächen.
- Für Seiten, die sich nicht bei jedem Aufruf ändern, gibt es statt der Nonce die Prüfsumme (Hash) eines Skripts.
Ein dritter Weg für sehr einfache SeitenEine Seite, die kein einziges Skript im HTML stehen hat und nur eigene Skriptdateien lädt, kann auch mit script-src 'self' gut fahren. So hält es HexWarte selbst. Das setzt voraus, dass unter der eigenen Adresse nichts liegt, was ein Angreifer als Skript ausliefern lassen könnte, etwa hochgeladene Dateien.
Ein Beispiel: dieselbe Lücke, drei Richtlinien
Ein Kommentarfeld gibt Text ungeprüft aus. Jemand schreibt statt eines Kommentars ein script-Element hinein. Was passiert unter drei verschiedenen Richtlinien?
In allen drei Fällen bleibt die eigentliche Lücke bestehen: Das Kommentarfeld gibt ungeprüften Text aus. Die Richtlinie entscheidet nur, ob daraus ein ausgeführter Angriff wird.
Quellen
Geprüft am 21. September 2026. Die Einordnung ist eine fachliche Bewertung, keine Rechtsberatung. Einen Fehler gefunden? Die Kontaktdaten stehen im Impressum.