2013-07-22 9 views
9

Ich schreibe eine Chrome-Erweiterung, die zwei Domänen in der Whitelist für die Inhaltssicherheitsrichtlinie benötigt. Ich habe mir die offiziellen Dokumente angesehen, aber ich kann immer noch nicht die richtige Syntax herausfinden.Whitelist mehrere Domänen in Inhaltssicherheitsrichtlinie

Die folgenden nicht zu funktionieren scheint:

"content_security_policy": "script-src 'self' https://foo.com https://example.com; object-src 'self'" 

EDIT:

Sowohl meine Content-Skript und mein Popup kann foo.com erreichen, jedoch weder erreichen example.com .

Sind Chrome-Erweiterungen in der Lage, mehrere Quellen auf der CSP zuzulassen?

+0

Inhaltsskripts werden nicht vom CSP der Erweiterung, sondern von den Seiten beeinflusst. –

+0

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

+0

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

Antwort

10

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:

  1. 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.

  2. 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.

+0

Vielen Dank für die Hilfe. Die Domäne, die ich kontaktieren wollte, hatte einige seltsame Umleitungsregeln, die HTTP unter bestimmten Bedingungen erzwangen. –

+0

sehr aufschlussreiche Antwort! – fegemo

Verwandte Themen