Von dem, was ich über CSPs weiß, sieht das syntaktisch korrekt aus. Die HTML5 Rocks article on CSP stimmt mit Ihrer Syntax und sagt:
script-src https://host1.com https://host2.com
korrekt beiden Ursprünge als gültig angeben würde.
jedoch Ihr Problem sein kann, dass entweder:
Diese CSP disallows all subdomains, einschließlich www.foo.com
und www.example.com
. Sie können diese Subdomänen-Hostnamen explizit hinzufügen, oder Sie können https://*.foo.com
verwenden, um alle Subdomänen zuzulassen.
Wenn eine Ihrer Skriptanforderungen in eine nicht zulässige Domäne umgeleitet wird, schlägt die Anforderung fehl. Zum Beispiel, wenn https://example.com/foo.js
mit einer 301
oder 302
Umleitung reagiert auf https://notpermitted.com/foo.js
(nicht zulässig Herkunft) oder https://www.example.com/foo.js
(nicht zulässig Sub-Domain), wird die Anfrage according to the spec fehlschlagen:
Jedes Mal, wenn die User-Agent einen URI holt (einschließlich, wenn folgende Umleitungen) ... wenn die URI die erlaubten Skript Quellen nicht übereinstimmt, muss der User-Agent handeln, als ob es eine leere HTTP-400-Antwort erhalten hatte ...
BEARBEITEN:
Nur zur Bestätigung, ja, Chrome-Erweiterungen können mehrere HTTPS-Ursprünge auf die weiße Liste setzen. Sie können eine einfache Erweiterung bauen diese zu testen:
manifest.json
{
"name":"CSP Test",
"version":"1.0",
"manifest_version":2,
"browser_action":{
"default_popup":"csp_test.html"
},
"content_security_policy": "script-src 'self' https://www.iana.org https://ajax.googleapis.com; object-src 'self'"
}
csp_test.html
<script src="https://www.iana.org/_js/2013.1/jquery.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
<script src="csp_test.js"></script>
csp_test.js
alert(jQuery)
alert(jQuery.ui)
Diese Erweiterung lädt jQuery und jQuery UI von Remote-Domänen.Wenn Sie einen Ursprung aus dem CSP entfernen, wird die Meldung "undefined
" angezeigt, dass eine der Bibliotheken nicht geladen werden konnte.
Inhaltsskripts werden nicht vom CSP der Erweiterung, sondern von den Seiten beeinflusst. –
Redigierte meine Antwort ausgiebig; Bitte vergewissere dich, dass meine Beispiel-Erweiterung für dich funktioniert und dass du keine der Fehler ausführst, die ich in meiner Antwort ausführe. – apsillers
Versuchen Sie tatsächlich, 'example.com' zu erreichen? Das eigentliche 'https: // example.com' hat zwei Probleme: erstens leitet es zu' https: // example.iana.org/'um, und zweitens verwendet es ein Zertifikat, das nicht für seine Domäne geeignet ist und Chrome blockiert es. (Sie erhalten auf jeden Fall einen Warnhinweis, wenn Sie die URL eingeben. Ich bin mir nicht sicher, wie Skript-Ressourcen-Anfragen gehandhabt werden, aber ich schätze, es blockiert sie.) – apsillers