如何使Google跟踪代码管理器和内容安全政策共存?

Ala*_*blo 12 javascript security web content-security-policy google-tag-manager

内容安全-政策(CSP)头的目的是保护你免受恶意资源注入应用程序在你的web应用程序.为简单起见,您可以为所有图像,脚本,样式等提供允许的域来源的白名单.

与此同时,营销团队正在使用Google跟踪代码管理器(GTM)来管理代码.原理是从页面收集信息,将它们发送到GTM并将这些数据用作变量来生成标签,模板化JS/HTML和这些变量的混合.

问题是这些标签中的大多数都包含javascript,用于向跟踪器,广告服务器或任何合作伙伴发送非常具体的数据.让我们假设我的营销团队意识到安全风险,并且不会包含恶意脚本.

有没有办法知道哪些域是由GTM导入的,所以它们可以自动添加到我的CSP上?

rjb*_*ude 3

这是一个大问题,令我惊讶的是关于此的信息如此之少。请注意任何建议在 CSP 中设置unsafe-inline 的解决方案,因为这会使策略变得非常弱,几乎毫无用处。

为了回答您的直接问题,无法知道 GTM 以编程方式使用哪些域。我建议将 CSP 设置为仅报告模式,并使用错误作为创建白名单的指南。

为了回答如何使它们共存的更广泛的问题,主要解决方案是使用随机数值和随机数感知 GTM 脚本,如 Google 此处所述https://developers.google.com/tag-manager/web/聚苯乙烯

简而言之:

  1. 生成随机数值 - 这需要在每个页面加载时完成才能有效
  2. 将 CSP 中的随机数列入白名单
  3. 将其应用于包括 GTM 在内的任何内联脚本
  4. 将 GTM 加载的资源使用的所有主机列入白名单

但是,此解决方案并不完整,因为 GTM 似乎没有将随机数传播到任何自定义 HTML 标记。为此,您必须:

  1. 将 id(例如“gtm_script”)添加到 GTM 脚本标记的随机数感知版本 - 这将用于定位元素并捕获随机数
  2. 添加将存储随机数值的数据属性,例如 data-nonce="[此处为您的随机数值]"
  3. 在 GTM 中,创建一个新变量来捕获随机数。使用 DOM Element 类型,并选择 GTM 片段的 ID(本指南中的 gtm_script),然后从 data 属性中获取 nonce 值
  4. 在 GTM 中,将随机数值添加到任何自定义 HTML 脚本中
  5. 在 GTM 中,使用复选框启用支持 document.write

有关更全面的指南,包括 GTM 的屏幕截图,请参阅本文https://rbultitudezone.medium.com/tag-manager-services-and-website-security-using-gtm-with-csp-5749a610c600