我已复制了用于嵌入来自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>
它没有说明该页面上的任何地方或该代码被弃用,旧的或不再有效的文档。但是脚本文件被拒绝了,我不知道从哪里开始。
答案 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
。