web-dev-qa-db-fra.com

Politique de sécurité du contenu: impossible de charger l'API Google dans Chrome

Il s'agit d'une extension Chrome. J'essaie une application simple qui utilise l'API Google Chart

J'ai ce code dans mon document html "popup.html", qui est chargé en cliquant sur l'icône.

<!doctype html>
<html>
<head>
  <script type="text/javascript" src="js/libs/jquery-1.8.0.min.js"></script>
  <script type="text/javascript" src="js/popup.js"></script>
  <script type="text/javascript" src="http://www.google.com/jsapi?key=xxxxxxxxxxx"></script>

  [...]
</body>
</html>

J'obtiens le message suivant:

Refus de charger le script "http://www.google.com/jsapi?key=xxxxxxxxxxx", car il enfreint la directive de politique de sécurité du contenu suivante: "script-src 'self' chrome-extension-resource:".

J'ai compris que c'est quelque chose par rapport aux permissions, j'ai essayé de modifier mon fichier Manifest mais sans succès:

{
  [...]
  "manifest_version": 2,
  "permissions": ["http://*.google.com/"],
  "content_security_policy": "script-src 'self' http://www.google.com; object-src 'self'",
}

Une idée?

30
Laurent

Faites-le simplement utiliser le protocole https à la place. L'erreur que vous obtenez concerne la Politique de sécurité du conten .

Voir le Relaxing the default policy section de la page. Il mentionne que vous pouvez uniquement ajouter à la liste blanche HTTPS, chrome-extension, et chrome-extension-resource.

22
Some Guy

J'ai lutté avec ce problème au cours des 12 dernières heures et je l'ai finalement mis au travail. Pourquoi cela a-t-il pris autant de temps? Parce que j'ai été éjecté de la piste plusieurs fois. Tout d'abord, les fausses pistes:

  1. "Make it HTTPS" - Peu importe. Mon Chrome fait maintenant des appels HTTP réguliers vers un autre domaine et fonctionne très bien. (MISE À JOUR: Un peu plus de clarification. Le mythe "make it https" est enraciné dans un problème similaire que les gens ont tendance à avoir quand il s'agit de charger SCRIPT. Si vous devez apporter un fichier .js extérieur, alors oui, vous devez modifier votre content_security_policy et inclure le nom d'hôte approprié, qui semble n'accepter que https. Gardez à l'esprit que c'est différent de frapper un nom d'hôte externe pour quelque chose comme REST. Comme je l'ai déjà dit, cela ne nécessite pas de modification de content_security_policy, ni de https.)

  2. "Utilisez JSONP dans vos appels JQuery AJAX") - Cela pourrait être un moyen de traiter le domaine croisé AJAX dans les pages Web normales, mais ce n'est pas nécessaire dans une extension chrome en raison de la politique de sécurité du contenu intégrée. De plus, l'implémentation de JSONP ressemble à un PITA car elle nécessite des modifications côté serveur pour gérer le paramètre de rappel (ou quelque chose, je suis toujours pas sûr). En tout cas, pas nécessaire.

  3. "Mess avec la chaîne CSP (Content Security Policy) dans votre extension" - Sous la version manifeste 2, la chaîne par défaut fonctionne très bien: "script-src 'self'; object-src 'self'". Vous n'avez même pas besoin de le spécifier explicitement. Ce dont vous avez besoin est d'inclure le domaine que vous essayez de frapper à partir de l'extension en tant que valeur "d'autorisation".

La solution:

Supprimez tous les javascript en ligne de votre extension. Obtenez-le dans un fichier .js distinct. Je soupçonne que pour la plupart des fichiers html avec une quantité décente de javascript, ce processus sera nul. Heureusement pour moi, tout ce que j'avais était une charge corporelle que j'ai pu déplacer dans un fichier js séparé en tant qu'événement onload window.addlistener à la place.

La page que vous devez vraiment lire pour surmonter ce problème est ici: https://developer.chrome.com/apps/contentSecurityPolicy

28
fivedogit

J'obtiens cette erreur [Signaler] lorsque j'exécute Augury chrome pour déboguer une application Angular. Désactivez l'extension et l'erreur disparaît. Cela ne disparaîtra pas. aider les personnes qui écrivent des extensions, mais cela peut aider celles qui ne le sont pas.

[Report Only] Refused to load the script 'https://apis.google.com/js/googleapis.proxy.js?onload=startup' because it violates the following Content Security Policy directive: "script-src 'report-sample' 'nonce-EagvF0PX1Z3gVL2Dka1hbA' 'unsafe-inline' 'strict-dynamic' https: http:". 'strict-dynamic' is present, so Host-based whitelisting is disabled. Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.
0
intotecho