Content-Security-Policy erklärt: Die Hausordnung für den Browser

Jede Seite lädt mehr als ihren eigenen Text: Stylesheets, Skripte, Schriften, Bilder, manchmal ein Widget von einem anderen Server. Eine Content-Security-Policy – kurz CSP – legt fest, woher der Browser das alles laden darf. Alles andere blockiert er, bevor es Schaden anrichten kann.

Wozu das gut ist

Angenommen, jemand schmuggelt über ein gestohlenes Passwort ein Skript in eine Seite, das Eingaben an einen fremden Server schickt. Ohne CSP führt der Browser es einfach aus. Mit CSP fragt er vorher: Darf von dieser Adresse überhaupt ein Skript kommen? Darf die Seite überhaupt eine Verbindung dorthin aufbauen?

Die CSP ersetzt keine sauberen Filter. Sie ist die zweite Tür, die zu bleibt, wenn die erste doch einmal offen steht.

Was das CMF mitbringt

Das CMF schickt die Policy mit jeder Seite mit. Die Grundregel lautet: Alles kommt von der eigenen Domain. Ausnahmen gibt es nur dort, wo normale Inhalte sie brauchen:

Ein Widget erlauben

Wer ein externes Werkzeug einbindet – einen Chat, eine Karte, ein Newsletter-Formular –, trägt dessen Adresse in der config/site.json ein oder setzt sie per API über site_update. Die Basis bleibt dabei unangetastet, die Liste wird nur ergänzt:

"csp": {
  "script_src":  ["https://widget.example.com"],
  "connect_src": ["https://widget.example.com"]
}

Erweitern lassen sich Skripte, Verbindungen, Styles, Bilder, Schriften, Medien und Frames. Jede Quelle prüft das CMF streng: Nur Adressen und Schemata kommen durch. Schlüsselwörter wie unsafe-eval oder eingeschleuste Zeilenumbrüche werden verworfen. Eigene Einträge können die Policy also erweitern, aber nicht aushebeln.

Wenn der Server schon eine Regel hat

Setzt die .htaccess einer Installation bereits eine eigene Content-Security-Policy, schickt das CMF seit Version 1.17.0 keine zweite hinterher. Zwei Policies würden sich gegenseitig einschränken, und am Ende wäre blockiert, was eine von beiden erlaubt.

Wer von einer Version vor 1.14 aktualisiert, bekommt die CSP zunächst im Beobachtungsmodus: Der Browser meldet Verstöße nur in der Entwicklerkonsole, statt etwas zu blockieren. Das ist die Gelegenheit nachzusehen, was die eigene Seite von außen lädt. Sobald die nötigen Quellen in der site.json stehen, gilt die Policy automatisch.

Welche Schutzmechanismen sonst noch im System stecken, steht im Beitrag Sicherheit im CMF: Was unter der Haube passiert. Alle Einstellungen, die per API erreichbar sind, stehen in der API-Referenz.