整合內容安全政策

內容安全政策 (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。標頭會回報違規內容,但仍允許這些內容顯示在頁面上。