Content Security Policy (CSP) dient der Abwehr von Cross-Site-Scripting-Angriffen, bei denen im Browser schadhafter Code in eine Webseite eingeschleust wird. Dies geschieht durch Blockieren von Daten, die nicht ausdrücklich durch die Policy erlaubt wurden. Der HTTP-Header Content-Security-Policy
erlaubt die Angabe, welche Arten von Inhalten von welcher Quelle erlaubt sind, und ob nicht erlaubte Daten blockiert oder lediglich gemeldet werden sollen.
Im folgenden Beispiel wird JavaScript nur ausgeführt, wenn es von example.com stammt:
Content-Security-Policy: script-src example.com
Komplexe Regeln für unterschiedliche Datentypen
Für unterschiedliche Datentypen wie beispielsweise JavaScript, Stylesheets (CSS) oder Bilder können abweichende Regeln definiert werden. Die Policies sind getrennt durch ein Semikolon anzugeben. Jede Policy besteht aus einer Direktive und den dazu gehörigen Werten, getrennt durch ein Leerzeichen. Der Platzhalter (Wildcard) *
ermöglicht eine kompakte Angabe mehrerer gültiger Quellen. Der folgende Header würde beispielsweise JavaScript nur von example.com und allen Subdomains von example.org zulassen, Object-Daten (aus den HTML-Elementen <object>
, <embed>
und <applet>
) vollständig blockieren, aber alle anderen Datentypen von jeder beliebigen Quelle zulassen:
Content-Security-Policy: default-src *; script-src example.com *.example.org; object-src 'none'
Evaluierung und Reporting
Bei dynamischen Webseiten wie beispielsweise Content Management Systemen (CMS) bzw. Redaktionssystemen ist aber nicht jede externe Quelle im Voraus bekannt. Auch bei umfangreichen Projekten, die im Laufe vieler Jahre gewachsen sind, kann dies der Fall sein. Eine zu strenge Policy könnte möglicherweise ungewollt dazu führen, dass bestimmte Teile der Webseite nicht mehr funktionieren.
Um die Auswirkung der Content-Security-Policy zunächst zu evaluieren, besteht die Möglichkeit, Berichte an eine definierte Internetadresse zu senden ohne die unzulässigen Inhalte tatsächlich zu blockieren, indem der Header Content-Security-Policy-Report-Only
verwendet wird. Im folgenden Beispiel werden alle Inhalte gemeldet, die nicht per https
eingebunden werden:
Content-Security-Policy-Report-Only: default-src https:; report-uri /csp-violation-report-endpoint/
Um unzulässige Inhalte zu blockieren und zusätzlich Berichte zu versenden, wird bei Verwendung des Headers Content-Security-Policy
zusätzlich eine report-uri
angegeben:
Content-Security-Policy: default-src https:; report-uri /csp-violation-report-endpoint/