Content-Security-Policy mit script-src hash funktioniert nicht wie erwartet
bearbeitet von Christian KruseHallo 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:
~~~html
<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:
~~~http
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](https://wwwtech.de/).
LG,
CK
--
<https://wwwtech.de/about>
Content-Security-Policy mit script-src hash funktioniert nicht wie erwartet
bearbeitet von Christian KruseHallo 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:
~~~html
<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:
~~~http
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.](https://wwwtech.de/).
LG,
CK
--
<https://wwwtech.de/about>
Content-Security-Policy mit script-src hash funktioniert nicht wie erwartet
bearbeitet von Christian KruseHallo 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:
~~~html
<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:
~~~http
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?
LG,
CK
--
<https://wwwtech.de/about>