如何让 Google Tag Manager 和 Content-Security-Policy 共存?
Posted
技术标签:
【中文标题】如何让 Google Tag Manager 和 Content-Security-Policy 共存?【英文标题】:How to make Google Tag Manager and Content-Security-Policy coexist? 【发布时间】:2017-04-19 20:32:25 【问题描述】:Content-Security-Policy (CSP) 标头旨在保护您的应用程序免受网络应用程序中的恶意资源注入。为简单起见,您可以为所有图像、脚本、样式等提供允许的域来源白名单。
与此同时,营销团队正在使用Google Tag Manager (GTM) 来管理标签。其原理是从页面收集信息,将它们发送到 GTM 并使用这些数据作为变量来生成标签、模板化 JS/html 和这些变量的混合。
问题在于这些标签中的大多数都包含 javascript,用于向跟踪器、广告服务器或任何合作伙伴发送非常具体的数据。假设我的营销团队意识到安全风险并且不会包含恶意脚本。
有没有办法知道 GTM 导入了哪些域,以便可以将它们自动添加到我的 CSP 中?
【问题讨论】:
对于给定的“自动”值,您可以通过 GTM API 下载自定义图像标签和自定义 html 标签,并将它们解析为可能指示原始域的字符串。但是,当您谈论安全功能时,我认为“让我们假设没有人做任何恶意的事情”并不是一个好方法。我最近做的演讲中的一些相关幻灯片可能有助于说明原因:slideshare.net/EikePierstorff/… 出色的演示文稿,在Youtube 上更好。您很好地描述了 GTM,“XSS 即服务”,与 CSP 冲突。当谷歌创建 GTM 时,我认为(或至少应该)被意识到安全风险的人使用,这就是为什么我假设提供给 GTM 的东西是安全的。无论如何,我稍后会考虑,感谢您的见解。 【参考方案1】:这是一个大问题,我很惊讶这方面的信息很少。请注意任何建议在您的 CSP 中设置 unsafe-inline 的解决方案,因为这会使策略变得如此脆弱,几乎没有用处。
要回答您的直接问题,我们无法知道 GTM 以编程方式使用了哪些域。我建议将 CSP 设置为仅报告模式,并使用错误作为创建白名单的指南。
要回答如何使它们共存这一更广泛的问题,主要的解决方案是使用 nonce 值和 Google 在此处 https://developers.google.com/tag-manager/web/csp 描述的可识别 nonce 的 GTM 脚本。
简而言之:
-
生成一个 nonce 值 - 这需要在每次页面加载时都进行才能生效
将 CSP 中的 nonce 列入白名单
将其应用于任何包含 GTM 的内联脚本
将 GTM 加载的资源使用的所有主机列入白名单
但是,此解决方案并不完整,因为 GTM 似乎没有将 nonce 传播到任何自定义 HTML 标记。为此,您必须:
-
在 GTM 脚本标记的 nonce 感知版本中添加一个 id,例如“gtm_script” - 这将用于定位元素并捕获 nonce
添加将存储 nonce 值的数据属性,例如data-nonce="[你的 nonce 值]"
在 GTM 中,创建一个新变量来捕获 nonce。使用DOM Element类型,并选择GTM sn-p的ID(本指南中的gtm_script),然后从数据属性中获取nonce值
在 GTM 中,将 nonce 值添加到任何自定义 HTML 脚本
在 GTM 中,使用复选框启用支持 document.write
如需更详尽的指南,包括 GTM 的屏幕截图,请参阅本文https://rbultitudezone.medium.com/tag-manager-services-and-website-security-using-gtm-with-csp-5749a610c600
【讨论】:
您能详细介绍一下随机数的 GTMP 传播吗?包括一些屏幕抓取或什么?我有点迷路了。 嗨@AdamYoungers 这里有一个非常有用的答案可能对您有所帮助:***.com/questions/65100704/… 你好@AdamYoungers 我已经添加了一篇文章的链接,其中包含有关配置 GTM 的更多详细信息【参考方案2】:我认为没有办法直接开箱即用。 您可以做的是使用 GTM API (https://developers.google.com/tag-manager/api/v1/reference/accounts/containers/tags/list) 基本上可以遍历所有 Custom HTML 和 Custom Image 标签并收集主机名
【讨论】:
以上是关于如何让 Google Tag Manager 和 Content-Security-Policy 共存?的主要内容,如果未能解决你的问题,请参考以下文章
3.1.4 Google Tag Manager基础知识——GTM部署
使用 Google Tag Manager 和 Universal Analytics 的 onclick 事件
javascript Google Tag Manager表单提交
使用 SameSite 和 Secure 属性设置 Google Tag Manager cookie
3.1 .1Google Tag Manager基础知识——GTM简介
来自 Google Tag Manager 的用户数据摄取流程,用于 Recommendation AI Google 云平台