与内容安全政策集成

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

配置 CSP 的标准有两种:

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

  2. 指定随机 Nonce,必须使用该页面上的资源进行加载。这种方法称为“严格 CSP”。

由于 Google 发布商代码 (GPT) 使用的网域会随着时间的推移而发生变化,因此我们仅支持严格的 CSP(选项 2)。采用这种方法时,您无需维护滚动的可能已过期的网域列表,也不会破坏您的网站。

使用 GPT 设置 CSP

  1. 在网络服务器上启用 CSP。

    按照采用严格的 CSP 中列出的步骤设置 CSP 标头,并将随机数应用于网页上的每个脚本标记,包括 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 async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js" nonce="KC7tcz53FHqumKP1"></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)来测试您的政策。该标头会报告违规行为,但仍然允许在网页上显示此类内容。