Dernièrement, certains sites Web tels que Facebook utilisent la politique de sécurité du contenu (CSP) pour restreindre le chargement de scripts à partir de "sources non fiables". Par exemple, lors de la demande de contenu HTML Facebook (par exemple https://www.facebook.com ), la réponse HTTP de Facebook comprend l'en-tête de réponse suivant:
x-webkit-csp:default-src *;script-src https://*.facebook.com http://*.facebook.com https://*.fbcdn.net http://*.fbcdn.net *.facebook.net *.google-analytics.com *.virtualearth.net *.google.com 127.0.0.1:* *.spotilocal.com:* chrome-extension://lifbcibllhkdhoafpjfnlhfpfgnpldfl 'unsafe-inline' 'unsafe-eval' https://*.akamaihd.net http://*.akamaihd.net;style-src * 'unsafe-inline';connect-src https://*.facebook.com http://*.facebook.com https://*.fbcdn.net http://*.fbcdn.net *.facebook.net *.spotilocal.com:* https://*.akamaihd.net ws://*.facebook.com:* http://*.akamaihd.net;
Cela a un impact sur certains bookmarklets qui nécessitent de charger et d'exécuter des bibliothèques Javascript à partir de sources non fiables.
Par exemple, chaque fois que j'essaie d'exécuter le bookmarklet Show Anchors sur une page Facebook, l'exécution de ce bookmarklet échoue car il essaie de charger jQuery à partir d'une source non fiable. Dans la console développeur de Chrome, il indiquera:
Refused to load the script 'http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js' because it violates the following Content Security Policy directive: "script-src https://*.facebook.com http://*.facebook.com https://*.fbcdn.net http://*.fbcdn.net *.facebook.net *.google-analytics.com *.virtualearth.net *.google.com 127.0.0.1:* *.spotilocal.com:* chrome-extension://lifbcibllhkdhoafpjfnlhfpfgnpldfl 'unsafe-inline' 'unsafe-eval' https://*.akamaihd.net http://*.akamaihd.net".
J'ai trouvé une page de documentation Chrome sur ce sujet, mais elle ne s'applique qu'aux extensions Chrome .
Je recherche des solutions qui me permettent de
- soit pour une seule fois désactiver CSP
- ou ajouter définitivement à la liste blanche mes sources de confiance.
la source
Réponses:
Méthodes approuvées par Chrome Apps
Utiliser des bibliothèques de modèles
Utilisez une bibliothèque qui propose des modèles précompilés et tout est prêt. Vous pouvez toujours utiliser une bibliothèque qui n'offre pas de précompilation, mais cela nécessitera un certain travail de votre part et il y a des restrictions.
Vous devrez utiliser le sandboxing pour isoler tout contenu auquel vous souhaitez faire des choses «valables». Le sandboxing soulève CSP sur le contenu que vous spécifiez.
Contenu local Sandbox
Le sandboxing permet aux pages spécifiées d'être servies dans une origine unique en sandbox. Ces pages sont ensuite exemptées de leur politique de sécurité du contenu. Les pages en bac à sable peuvent utiliser des iframes, des scripts en ligne et eval () (et les deux derniers sont ceux qui sont empêchés). Cela corrigera «unsafe-inline» et «unsafe-eval».
Accéder aux ressources distantes
Vous pouvez récupérer des ressources distantes via XMLHttpRequest et les servir via blob :, data :, ou système de fichiers: URL. Cela devrait résoudre le problème de récupération de jQuery.
Exigence du manifeste
Pour pouvoir effectuer une origine croisée
XMLHttpRequests
, vous devrez ajouter une autorisation pour l'hôte de l'URL distante.Origine croisée
XMLHttpRequest
Récupérez l'URL distante dans l'application et servez son contenu en tant
blob:
qu'URL.Je ne pense pas que vous puissiez faire cela. Pour corriger les en
unsafe-eval
-unsafe-inline
têtes et réponse, seul le propriétaire du script peut corriger le code ou s'il est dans le domaine public, vous pouvez le corriger. Tout cela est probablement une solution unique.Hacks
UnsafeWindow
http://wiki.greasespot.net/UnsafeWindow
Injection de script de contenu
http://wiki.greasespot.net/Content_Script_Injection
Les hacks ont cependant des inconvénients, car ils ont certainement causé des failles de sécurité au moins le premier.
la source
Vous pouvez modifier ces paramètres dans l'onglet de contenu, auquel vous pouvez accéder directement en tapant
chrome://settings/content
dans la barre d'adresse. Vous pouvez mettre en liste blanche des domaines spécifiques sur des types de contenu spécifiques.la source