Die Content Security Policy ist ein Standard des W3C mit dessen Hilfe es möglich ist das Ausnutzen diverse Sicherheitslücken zu verhindern – insbesondere Cross-Site-Scripting (XSS).
Dabei handelt es sich um einen „passiven Schutz“, da der Client (Browser) das Ausnützen von vorhanden Sicherheitslücken verhindert. Eine nachhaltige Lösung ist es die Lücken im Source-Code zu beheben und ich rate dringend davon ab sich nur auf die CSP zu verlassen. Es ist aus meiner Sicht aber sinnvoll eine vernünftige CSP einzusetzen, da diese quasi als Fangnetzt dienen kann, wenn mal eine Sicherheitslücke rein rutscht oder man diese schlicht und einfach nicht beheben kann.
Wirklich vernünftig einsetzen kann man die CSP, aus meiner Sicht, erst mit der Version 3 (noch nicht von allen Browser unterstützt), da dort das „nonce-{random}“ und „strict-dynamic“ eingeführt wurden. Siehe Beitrag von Google und das „CSP policy example“. Sonst wird die List der Ausnahmen oft viel zu lange und unwartbar.
Die Idee ist es nur noch JavaScript Code auszuführen, der von der eigenen Applikation ausgespielt wurde. Dies gelingt über das „nonce-{random}“ Keyword. Um JavaScript-Code, der vom eigenen JavaScript Code nachgeladen wurde, auch ausführen zu können, benutzt man das „strict-dynamic“. Da ältere Browser diese Keywords ignorieren ist es notwendig mit Hilfe von „script-src ‘unsafe-inline’ https: http:“ ein Fallback einzurichten. Das führt zwar für diese älteren Browser zu keiner Verbesserung der Sicherheit, aber garantiert, dass die Seite in diesen Browsern weiterhin funktionieren.
Wichtig es in der CSP eine „report-uri“ anzugeben damit der Browser Verstöße gegen die CSP melden und man diese auswerten kann. Bevor man die CSP scharf stellt, ist es ratsam meine eine Zeit lang nur das Reporting zu aktiveren, aber die Policy selbst noch nicht. Man kann dann die Reports auswerten und mögliche Problem können behoben werden ohne die Funktionalität der Webseite zu beeinträchtigen.
Lukas Weichselbaum hat auf der DeepSec 2016 darüber gesprochen, auf seinem Twitter Account gibt es immer wieder nützliche Updates rund um CSP.
Hier noch ein paar hilfreich Links bzgl CSP:
https://content-security-policy.com
https://csp.withgoogle.com/docs/index.html
https://csp-evaluator.withgoogle.com/https://www.owasp.org/index.php/Content_Security_Policy_Cheat_Sheet