Christian Kruse: Content-Security-Policy mit script-src hash funktioniert nicht wie erwartet

Beitrag lesen

problematische Seite

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