由于内容安全政策错误,Google Analytics嵌入API无法加载

时间:2017-10-16 16:33:53

标签: google-analytics cors content-security-policy

我已复制了用于嵌入来自https://developers.google.com/analytics/devguides/reporting/embed/v1/getting-started的Google AnalyticsAPI的确切Google示例代码

我的浏览器说的是:

  

内容安全政策:忽略script-src中的“'unsafe-inline'”:   'strict-dynamic'指定(未知)

     

内容安全政策:   忽略script-src中的“https:”:指定'strict-dynamic'   (未知)

     

内容安全策略:忽略script-src中的“http:”:   'strict-dynamic'指定(未知)

我已经在我的http localhost和web服务器上的https域上尝试过,结果相同。

复制问题不需要步骤2下面的实际代码,只是将其脚本添加到文档中已经导致出现该错误。因此,错误与任何特定的Google帐户或API密钥无关。

像这样:

<!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>

它没有说明该页面上的任何地方或该代码被弃用,旧的或不再有效的文档。但是脚本文件被拒绝了,我不知道从哪里开始。

2 个答案:

答案 0 :(得分:0)

这不是代码的问题,这似乎与您的服务器配置有关。

内容安全策略旨在防止(除其他外)XSS攻击,并通过阻止来自未知来源的脚本执行或动态插入来实现此目的。由于嵌入式API依赖于内联脚本,远程代码注入以及恶意软件也采用的其他技术,因此它被CSP阻止。

CSP由服务器设置为http标头,因此您需要与管理服务器的任何人交谈。最有可能的是,他或她不会简单地删除安全功能,这意味着您无法使用嵌入API。

没有办法(我知道)使内联脚本和代码注入安全。更改CSP以允许内联脚本将简单地删除它可能提供的所有保护。

答案 1 :(得分:0)

如果您的内容安全策略包含“严格动态”,那么您的服务器可能还会创建一个随机的每个响应nonce值,并将其放入Content-Security-Policy响应标头中。

要运行Google Analytics脚本块,您必须插入与<script>元素的属性相同的值,例如

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

(其中csp_nonce必须由模板系统替换为随机值;变量名称和插值语法取决于您的服务器端配置。)

或者,要允许静态<script>块运行,您可以使用CSP2 hash。您可以通过将脚本的内容复制到https://report-uri.com/home/hash找到脚本的SHA256哈希值,并将此值添加到CSP标题中的script-src