Chrome 18+: Comment permettre l'utilisation de script inline avec un Contenu Politique de Sécurité?
Chrome 18 Dev/Canaries vient d'être publié, et content_security_policy
seront nécessaires dans le manifeste pour certaines extensions.
Je vais essayer d'obtenir un CSP de travail pour en ligne de script, mais je ne sais pas si je fais quelque chose de mal ou si c'est un Chrome 18 bug.
manifeste.json:
{
"name": "CSP Test",
"version": "1.0",
"manifest_version": 2,
"options_page": "test.html",
"content_security_policy": "default-src 'unsafe-inline'"
}
test.html:
<html><head>
<script type="text/javascript">
alert("hello");
</script>
</head></html>
En Chrome de 18 ans, ce déballé l'extension de l'échec du chargement, l'affichage d'un message d'erreur:
Si je change 'unsafe-inline'
à 'self'
, l'extension de charge très bien, mais alert()
ne fonctionne pas, et la page des options de la console contient une erreur:
Refusa d'exécuter de script en ligne en raison du Contenu de la Politique de Sécurité.
En Chrome 16, à l'aide de 'unsafe-inline'
permet l'extension de la charge d'amende et alert()
œuvres, trop. Toutefois, en Chrome 16, en remplacement de 'unsafe-inline'
avec 'foo'
permet l'extension de la charge, mais, bien sûr, ne laissez pas alert()
travail, alors peut-être que Chrome 18 est plus stricte que 16 ans, mais...
Est default-src 'unsafe-inline'
en fait non valide, ou est-ce un bug? Ce CSP valeur puis-je utiliser pour faire alert()
travail en Chrome de 18 ans?
Basé sur la accepté de répondre ci-dessous, en ligne scripts ne fonctionnent plus dans les extensions dans Chrome 18. alert()
devra être placé dans son propre fichier JavaScript.
Vous devez vous connecter pour publier un commentaire.
Pour les versions récentes de Chrome (46+) la réponse actuelle n'est plus vrai.
unsafe-inline
n'a toujours pas d'effet (dans le manifeste et dansmeta
balises d'en-tête), mais par la la documentation, vous pouvez utiliser la technique décrite ici pour se détendre la restriction.Exemple
De considérer les éléments suivants:
manifeste.json:
background.html:
Résultat:
Complément d'enquête
J'ai aussi testé de mettre la directive applicable dans un
meta
tag au lieu de le manifester. Alors que le CSP est indiqué dans le message de la console n'inclut pas le contenu de la balise, il ne serait pas exécuter le script inline (dans Chrome 53).nouveau background.html:
Résultat:
Annexe: Générer le hachage
Voici deux méthodes pour générer le hachage:
Assurez-vous que lorsque le hachage de la ligne des scripts que l' ensemble contenu de la balise de script sont inclus (y compris tous les avant/après des espaces). Si vous souhaitez intégrer dans vos constructions, vous pouvez utiliser quelque chose comme cheerio pour obtenir les sections pertinentes. De façon générique, pour tout
html
, vous pouvez le faire:C'est la méthode utilisée dans hachage-csp, une gorgée plugin pour générer des tables de hachage.
La réponse suivante qui est vrai pour les anciennes versions de google Chrome (<46). Pour les plus récents, veuillez vérifier @Chris-Chasse répondre https://stackoverflow.com/a/38554505/422670
J'ai posté juste très semblable à la réponse pour la question https://stackoverflow.com/a/11670319/422670
Comme il est dit, il n'y a aucun moyen de se détendre la ligne politique de sécurité dans la v2 extensions.
unsafe-inline
ne fonctionne tout simplement pas, intentionnellement.Il n'y a vraiment pas d'autre moyen que de déplacer tous vos javascript dans des fichiers js et point avec un
<script src>
.Il y a, cependant, la possibilité de faire Eval et nouvelle Fonction à l'intérieur d'un bac à sable iframe, par exemple, avec les lignes suivantes dans le manifeste:
Un bac à sable de la page n'aura pas accès à l'extension ou une application Api, ou accès direct à la non-sandbox pages (il peut communiquer avec eux via postMessage()). Vous pouvez restreindre davantage la sandbox de droits avec un fournisseur spécifique
Il y a maintenant un exemple complet de l'équipe Google Chrome sur le github eval dans un iframe sur la façon de contourner le problème en communiquant avec un bac à sable iframe, ainsi que d'un court tutoriel google analytics
Grâce à Google, il y a beaucoup d'extension de la réécriture de la gamme 🙁MODIFIER
Il est possible de détendre la politique de sécurité pour les scripts DISTANTS. Mais pas pour les inlines.
cela est apparu dans le tronc de la documentation il est question dans le thread "eval ré-autorisé"
inline scripts
ne sera pas de retour si:onclick
à travers les pages...There is no mechanism for relaxing the restriction against executing inline JavaScript.
Content Security Policy
. Pourriez-vous s'il vous plaît laissez-moi comment aller autour de cela? API exemple de lien: loklak.org/api/search.json?q=from%3Atwitter toute erreur est:Refused to load the script 'http://loklak.org/api/search.json?callback=loklakFetcher.handleData&q=muanchiou&count=25&source=cache&fields=&limit=&timezoneOffset=60&minified=true' because it violates the following Content Security Policy directive: "script-src 'self'".
Hachage d'utilisation pour les scripts est autorisée dans le Contenu de la Politique de Sécurité de Niveau 2. À partir de l'exemple de la spécification:
Une alternative est la pour l'instant, à nouveau à partir de l'exemple:
puis
Semble pris en charge dans Chrome 40+, mais je suis incertain quelle chance on aurait avec d'autres navigateurs à l'heure actuelle.
autant que je sache, c'est un bug.œuvres, alors que
ne marche pas.
Il est vraiment à la pointe de la technologie, de vérifier http://code.google.com/p/chromium/issues/detail?id=105796 pour plus de détails.Mise à jour: http://code.google.com/p/chromium/issues/detail?id=107538 se réfère à cette question.