谷歌Analytics(分析)嵌入由于内容安全策略错误

问题描述:

我复制了确切谷歌的示例代码从https://developers.google.com/analytics/devguides/reporting/embed/v1/getting-started谷歌Analytics(分析)嵌入由于内容安全策略错误

什么我的浏览器说,嵌入谷歌分析API的API不加载是:

内容安全策略:轻“ '不安全列直插式'”脚本SRC内: 的严格动态“指定(未知)

内容安全策略: 忽略“https:”开头的脚本-SRC内:“严格-dynami C”指定 (未知)

内容安全策略:忽略‘HTTP:’脚本SRC内: 的严格动态“指定(未知)

我已经试过这两个在我的HTTP本地主机和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> 

它并不页面或将这段代码已被弃用,或旧或不再有效的文档上的任何地方说。但脚本文件只是被拒绝了,我不知道该从哪里去。

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

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

服务器将CSP设置为一个http头,因此您需要与为您管理服务器的人通话。他或她很可能不会简单地删除安全功能,这意味着您不能使用嵌入式API。

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

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

要使分析脚本块运行,必须插入与<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