コンテンツ セキュリティ ポリシー(CSP)は、読み込みと実行を許可するリソースとスクリプトを制限することでウェブページを保護する手段です。ウェブサーバーからの HTTP レスポンスに Content-Security-Policy
ヘッダーを設定することで、CSP を有効にできます。
CSP を構成する標準的な方法は 2 つあります。
ページにリソースを挿入できるドメインの許可リストを指定します。
ランダムなノンスを指定します。これにより、読み込みのためにページ上のリソースをマークする必要があります。このアプローチは、厳格な CSP と呼ばれます。
Google パブリッシャー タグ(GPT)で使用されるドメインは時間とともに変化するため、厳格な CSP(オプション 2)のみがサポートされます。このアプローチにより、古くなり、サイトが機能しなくなる可能性があるドメインのローリング リストを管理する必要がなくなります。
GPT で CSP を設定する
ウェブサーバーで 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/
ユースケースに適合する場合は、より制限の少ないポリシーを選択できます。より制限の厳しいポリシーは、予告なく停止される場合があります。
クロスドメイン レンダリングを有効にする。
広告 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
ではなく Content-Security-Policy-Report-Only
ヘッダーを設定します。ヘッダーでは違反が報告されますが、ページでは引き続き許可されます。