2017-10-16 5 views
0

J'ai copié le code exemple de Google exacte pour intégrer l'API Google Analytics de https://developers.google.com/analytics/devguides/reporting/embed/v1/getting-startedGoogle Analytics embed API ne se charge pas en raison d'une erreur de politique de sécurité de contenu

Et ce que mon navigateur dit est:

contenu de la politique de sécurité: Ignorant « dangereux-ligne » au sein de script src: 'stricte dynamique' spécifiée (inconnue)

contenu Politique de sécurité: Ignorer « https: » dans un script src: « stricte-dynami c » spécifié (inconnu)

contenu politique de sécurité: Ignorer « http: » au script src: 'stricte dynamique' spécifiée (inconnue)

Je l'ai essayé à la fois sur mon http localhost, et un domaine https sur un serveur web, avec le même résultat.

Le code réel en dessous de l'étape 2 n'est pas nécessaire pour répliquer le problème, seul l'ajout de leur script au document entraîne déjà l'apparition de cette erreur. L'erreur n'est donc en aucun cas liée à un compte Google spécifique ou à une clé API.

Comme ceci:

<!DOCTYPE html> 
<html> 
<head> 
    <title>Embed API Demo</title> 
</head> 
<body> 

<!-- Step 1: Create the containing elements. --> 

<section id="auth-button"></section> 
<section id="view-selector"></section> 
<section id="timeline"></section> 

<!-- Step 2: Load the library. --> 

<script> 
(function(w,d,s,g,js,fjs){ 
    g=w.gapi||(w.gapi={});g.analytics={q:[],ready:function(cb){this.q.push(cb)}}; 
    js=d.createElement(s);fjs=d.getElementsByTagName(s)[0]; 
    js.src='https://apis.google.com/js/platform.js'; 
    fjs.parentNode.insertBefore(js,fjs);js.onload=function(){g.load('analytics')}; 
}(window,document,'script')); 
</script> 
</body> 
</html> 

Il ne dit nulle part sur cette page ou la documentation que ce code est dépréciée, ou vieux, ou ne sont plus valables. Mais le fichier script est juste refusé, et je ne sais pas où aller à partir d'ici.

Répondre

0

Ce n'est pas un problème avec le code, cela semble plutôt être lié à la configuration de votre serveur. Les stratégies de sécurité sont conçues pour empêcher (entre autres) les attaques XSS, et ce, en empêchant l'exécution ou l'insertion dynamique de scripts de sources inconnues. Depuis l'API d'intégration repose sur le script en ligne, l'injection de code à distance et d'autres techniques également employées par des logiciels malveillants, il est bloqué par le CSP.

Les CSP sont définis comme un en-tête http par le serveur, vous devez donc parler à celui qui gère votre serveur pour vous. Très probablement, il ne supprimera pas simplement une fonctionnalité de sécurité, ce qui signifierait que vous ne pouvez pas utiliser l'API d'intégration.

Il n'y a aucun moyen (que je connaisse) pour sécuriser le script et l'injection de code en ligne. Changer le CSP pour permettre le script en ligne supprimera simplement toute protection qu'il pourrait offrir.

0

Si votre stratégie de sécurité du contenu contient 'strict-dynamic', votre serveur crée probablement une valeur aléatoire nonce par réponse et la place dans l'en-tête de réponse Content-Security-Policy.

Pour que le bloc de script Analytics s'exécute, vous devez insérer la même valeur qu'un attribut de l'élément <script>, par ex.

<script nonce="{{ csp_nonce }}"> 
(function(w,d,s,g,js,fjs){ ... }(window,document,'script')); 
</script> 

(où csp_nonce doit être remplacée par la valeur aléatoire par le système de gabarit, le nom de la variable et de la syntaxe d'interpolation dépendent de la configuration côté serveur.

Alternativement, pour permettre l'exécution d'un bloc <script> statique, vous pouvez utiliser un CSP2 hash. Vous pouvez trouver le hachage SHA256 de votre script en copiant son contenu dans https://report-uri.com/home/hash et ajouter cette valeur à script-src dans votre en-tête CSP.