整合內容安全政策

內容安全政策 (CSP) 會限制允許載入和執行的資源和指令碼,藉此保護您的網頁。您可以從網路伺服器的 HTTP 回應中設定 Content-Security-Policy 標頭,藉此啟用 CSP。

設定 CSP 有兩種標準方式:

  1. 指定可在網域中插入資源的網域許可清單。

  2. 指定隨機 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 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) 來測試政策。標題會回報違規行為,但仍允許在網頁上