将跟踪代码管理器与内容安全政策结合使用

内容安全政策 (CSP) 是一种受到广泛支持的网络安全标准,旨在通过让开发者控制应用可以加载的资源,来防止某些类型的基于内容注入的攻击。通过本指南,您可以了解如何在使用 CSP 的网站上部署 Google 跟踪代码管理器。

启用容器代码以使用 CSP

若要在实施了 CSP 的网页上使用 Google 跟踪代码管理器,CSP 必须允许执行跟踪代码管理器容器代码。这种代码会构建为可注入 gtm.js 脚本的内嵌 JavaScript 代码。为此,您可以采用多种方式,例如使用 Nonce 或哈希值。建议您采用 Nonce 值,它应该是服务器为每次响应单独生成的一个无法猜测的随机值。在内容安全政策 script-src 指令中,提供该 Nonce 值:

Content-Security-Policy: script-src 'nonce-{SERVER-GENERATED-NONCE}'; img-src www.googletagmanager.com

然后,使用可获知 Nonce 的内嵌跟踪代码管理器容器代码版本,将内嵌脚本元素上的 Nonce 属性设为以下值:

<!-- Google Tag Manager -->
<script nonce='{SERVER-GENERATED-NONCE}'>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;var n=d.querySelector('[nonce]');
n&&j.setAttribute('nonce',n.nonce||n.getAttribute('nonce'));f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXX');</script>
<!-- End Google Tag Manager -->

随后,跟踪代码管理器会将 Nonce 的值复制到它在网页中添加的任何脚本上。

还可以通过其他方法启用内嵌脚本的执行,例如提供 CSP 中内嵌脚本的哈希

如果推荐的 Nonce 或哈希方法不可行,可将 'unsafe-inline' 指令添加到 CSP 的 script-src 部分中,以此方式启用跟踪代码管理器内嵌脚本。

若要使用此方法,需要在 CSP 中使用以下指令:

script-src: 'unsafe-inline' https://www.googletagmanager.com
img-src: www.googletagmanager.com

自定义 JavaScript 变量

由于自定义 JavaScript 变量的实现方式不一样,因此它们将在 CSP 存在的情况下求值为 undefined,除非在 CSP 的 script-src 部分提供 'unsafe-eval' 指令。

script-src: 'unsafe-eval'

预览模式

若要使用 Google 跟踪代码管理器的预览模式,CSP 必须包含以下指令:

script-src: https://googletagmanager.com https://tagmanager.google.com
style-src: https://googletagmanager.com https://tagmanager.google.com https://fonts.googleapis.com
img-src: https://googletagmanager.com https://ssl.gstatic.com https://www.gstatic.com
font-src: https://fonts.gstatic.com data:

Google Analytics(分析)4(Google Analytics [分析])

若要使用 Google Analytics(分析)4(Google Analytics [分析])代码,CSP 必须包含以下指令:

script-src:  https://*.googletagmanager.com
img-src:     https://*.google-analytics.com https://*.googletagmanager.com
connect-src: https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com

对于使用 Google 信号的 Google Analytics(分析)4(Google Analytics [分析])部署,CSP 必须包含以下指令:

script-src:  https://*.googletagmanager.com
img-src:     https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com
             https://*.g.doubleclick.net https://*.google.com https://*.google.<TLD>
connect-src: https://*.google-analytics.com https://*.analytics.google.com
             https://*.googletagmanager.com https://*.g.doubleclick.net https://*.google.com https://*.google.<TLD>

Universal Analytics(Google Analytics [分析])

要使用 Universal Analytics(Google Analytics [分析])代码,CSP 必须包含以下指令:

script-src: https://www.google-analytics.com https://ssl.google-analytics.com
img-src: https://www.google-analytics.com
connect-src: https://www.google-analytics.com

如需使用 Google Ads 转化跟踪代码,内容安全政策必须包含以下指令:

对于安全连接:

script-src: https://www.googleadservices.com https://www.google.com
img-src: https://googleads.g.doubleclick.net https://www.google.com https://google.com

对于非安全连接:

script-src: www.googleadservices.com www.google.com
img-src: googleads.g.doubleclick.net www.google.com google.com

如需使用 Google Ads 再营销代码,内容安全政策必须包含以下指令。

对于安全连接:

script-src: https://www.googleadservices.com https://googleads.g.doubleclick.net https://www.google.com
img-src: https://www.google.com https://google.com
frame-src: https://bid.g.doubleclick.net

对于非安全连接:

script-src: www.googleadservices.com googleads.g.doubleclick.net www.google.com
img-src: www.google.com google.com
frame-src: bid.g.doubleclick.net

Floodlight

Floodlight 用户可使用以下配置启用 CSP。要允许使用任一广告客户 ID,可将 <FLOODLIGHT-CONFIG-ID> 值替换为特定的 Floodlight 广告客户 ID 或 *

对于所有用户:

img-src: https://<FLOODLIGHT-CONFIG-ID>.fls.doubleclick.net

对于跟踪代码管理器中的“自定义脚本”信标:

frame-src: https://<FLOODLIGHT-CONFIG-ID>.fls.doubleclick.net

对于图片代码:

img-src: https://ad.doubleclick.net

对于意见征求模式

img-src: https://ade.googlesyndication.com