与内容安全政策集成

内容安全政策 (CSP) 是一种通过限制允许加载和执行的资源和脚本来保护网页安全的方法。您可以通过在网络服务器的 HTTP 响应中设置 Content-Security-Policy 标头来启用 CSP。

配置 CSP 有两种标准方法:

  1. 指定可以在网页上注入其资源的网域许可名单。

  2. 指定一个随机 Nonce,网页上的资源必须带有此 Nonce 才能加载。此方法称为严格 CSP

由于 Google 发布商代码 (GPT) 使用的网域会随时间而变化,因此我们仅支持严格 CSP(选项 2)。这种方法无需维护可能过时并导致网站崩溃的网域滚动列表。

使用 GPT 设置 CSP

  1. 在您的网站服务器上启用 CSP。

    按照采用严格 CSP 中所述的步骤设置 CSP 标头,并将 Nonce 应用于网页上的每个脚本标记,包括 gpt.js。GPT 专门支持以下 CSP 指令:

    Content-Security-Policy:
      object-src 'none';
      script-src 'nonce-{random}' 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;
      base-uri 'none';
      report-uri https://your-report-collector.example.com/
    

    如果某项政策更适合您的用例,您可以选择该政策。我们可能会在不另行通知的情况下,违反更严格的政策。

  2. 启用跨网域渲染。

    广告 iframe 可以加载 CSP 可能不允许的外部资源。由于同网域 iframe 会继承顶级窗口的 CSP,而 GPT 无法控制广告素材的内容,因此同网域广告素材通常无法与 CSP 标头正常配合使用。

    如需为所有广告素材启用跨网域呈现,请在加载任何广告展示位置之前执行 googletag.pubads().setForceSafeFrame(true)

    <!doctype html>
    <html>
      <head>
        <meta charset="utf-8">
        <title>Hello GPT</title>
        <script src="https://securepubads.g.doubleclick.net/tag/js/gpt.js" nonce="KC7tcz53FHqumKP1" async></script>
        <script nonce="KC7tcz53FHqumKP1">
          window.googletag = window.googletag || {cmd: []};
          googletag.cmd.push(function() {
            googletag.pubads().setForceSafeFrame(true);
          });
        </script>
      </head>
    

测试

我们建议您先设置 Content-Security-Policy-Report-Only 标头(而非 Content-Security-Policy),以便测试您的政策。标头会报告违规行为,但仍允许在网页上显示这些违规行为。