Jam*_*esG 23 javascript google-analytics content-security-policy
我有一个使用默认html5boilerplate内容安全策略的Web应用程序.
但是,我们在页面上有新的Google analytics.js代码段,该代码段已被CSP阻止.
我一直试图找到一个CSP和JS包含结构的例子,它将允许谷歌analytics.js,但没有任何运气.
最接近的SO帖子是Google Analytics和Content-Security-Policy标头,但这是使用较旧的ga.js.
不幸的是,Google Docs没有提到CSP.
我已经达到了以下解决方案:
我的html文件的底部:
<script type="text/javascript" src="/js/analytics.js"></script>
Run Code Online (Sandbox Code Playgroud)
analytics.js的内容:
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function()
{ (i[r].q=i[r].q||[]).push(arguments)}
,i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g; m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-XXXXXXXX-1', 'auto');
ga('send', 'pageview');
Run Code Online (Sandbox Code Playgroud)
.htaccess CSP:
Header set Content-Security-Policy "script-src 'self' https://ssl.google-analytics.com http://www.google-analytics.com; object-src 'self'"
Run Code Online (Sandbox Code Playgroud)
这是有效的 - 但我不确定我是否会打破GA代码的异步性质,或者造成一些其他意想不到的后果.
有人可以建议通过内容安全策略允许Google analytics.js的正确方法吗?
作者编辑: 最后,我使用了Google Analytics和Content-Security-Policy标题中详细介绍的解决方案,还原为ga.js. 但我仍然想知道是否可以以相同的方式使用analytics.js.
作者编辑2: 看起来可能直接使用Google提供的analytics.js以及与其他SO帖子相同的原则:
HTML文件的底部:
<script type="text/javascript" src="https://ssl.google-analytics.com/analytics.js"></script>
<script type="text/javascript" src="/js/analytics.js"></script>
Run Code Online (Sandbox Code Playgroud)
analytics.js的内容:
ga('create', 'UA-XXXX-Y', 'auto');
ga('send', 'pageview');
Run Code Online (Sandbox Code Playgroud)
CSP:
Header set Content-Security-Policy "script-src 'self' https://www.google-analytics.com https://ssl.google-analytics.com; object-src 'self'"
Run Code Online (Sandbox Code Playgroud)
这是未经测试的 - 我没有检查Google分析是否正在接收数据,但没有控制台或CSP错误.手指交叉.
joh*_*ith -2
你的 .htaccess 解决方案应该是正确的。
为什么要阻止它的(客户端)异步性质?
在浏览器控制台中,您将看到哪些主机的请求被阻止,如果在浏览页面时有来自 gugl 的任何被阻止的请求,您可以将主机名添加到您的策略设置中