Hallo alle,
ich spiele gerade (zum Zwecke der Weiterbildung) mit Content-Security-Policy
-Headern herum. Im Grunde ist das ja kein Hexenwerk, jedoch bin ich da auf ein Problem gestoßen. Gegeben sei folgendes Inline-Script, dass ich in einem onload
notiere:
<link rel="stylesheet" href="/css/font-da5c620f50bea52c7f4bce090827ebc1.css?vsn=d" media="none" onload="if(media!='all')media='all'">
Ich lade damit (non-blocking) einen Font nach. Nun führe ich folgenden Header ein:
Content-Security-Policy: default-src 'none'; script-src 'sha256-eTuulTlJnm4CGH/rvS4g/RfdQCYAM/UXXb/C8pREDZo='; img-src 'self'; style-src 'self'; object-src 'none'
Damit sollten meinem Verständnis nach alle Scripte außer dem einen Inline-Handler verboten werden. Dummerweise wird aber das Script in dem Handler auch nicht erlaubt, Chrome sagt mir:
Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'sha256-eTuulTlJnm4CGH/rvS4g/RfdQCYAM/UXXb/C8pREDZo='". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.
Der Firefox sagt ähnliches:
Content Security Policy: Die Einstellungen der Seite haben das Laden einer Ressource auf self blockiert ("script-src 'sha256-eTuulTlJnm4CGH/rvS4g/RfdQCYAM/UXXb/C8pREDZo='"). Source: onload attribute on LINK element.
Zuerst dachte ich, dass die SHA256-Summe falsch ist, aber die ist definitiv richtig:
echo -n "if(media!='all')media='all'" | openssl dgst -sha256 -binary | base64
eTuulTlJnm4CGH/rvS4g/RfdQCYAM/UXXb/C8pREDZo=
Hat jemand eine Idee, was ich hier falsch mache?
Edit: ich hab das mal auf WWWTech.de online gestellt.
Edit 2: Ich habe natürlich auch ausprobiert die Prüfsumme Hex-codiert anzugeben. Das geht auch nicht.
LG,
CK