コンテンツセキュリティポリシー(CSP)のサポート

コンテンツセキュリティポリシー(CSP)は、クロスサイトスクリプティング攻撃(XSS)を防ぐセキュリティ機能です。この攻撃は、悪意のあるコンテンツが、実際は別の場所から送られているのに、信頼されたソースから来たように見せかけ、ブラウザーを騙して実行させるときに発生します。CSP を使用すれば、ブラウザーは(ユーザーの代理として)、スクリプトが実際に信頼できるソースから送られたものであることを検証できます。

CSP は、サーバー応答に Content-Security-Policy HTTP ヘッダーを追加するか、HTML ファイルの <meta> セクションに設定済みの <head> 要素を追加することで実装されます。

メモ

CSP の詳細については、「MDN Web ドキュメント」を参照してください。

Adobe Experience Platform Launch はタグ管理システムとして、Web サイトへと動的にスクリプトを読み込むよう設計されています。セキュリティ上の問題が発生する可能性があるため、デフォルトの CSP は、動的に読み込まれるこれらのスクリプトをブロックします。このドキュメントでは、Platform Launch から動的に読み込まれるスクリプトを許可するよう CSP を設定する方法のガイダンスを提供します。

Adobe Experience Platform Launch を CSP と連携させるには、2 つの主な課題を克服する必要があります。

  • Platform Launch ライブラリのソースを信頼する必要があります。​この条件が満たされない場合、Platform Launch ライブラリおよびその他の必要な JavaScript ファイルはブラウザーでブロックされ、ページに読み込まれません。
  • インラインスクリプトを許可する必要があります。​この条件が満たされない場合、カスタムコードルールのアクションはページ上でブロックされ、正しく実行されません。

Platform Launch を使用し、さらに CSP を配置する場合、他のスクリプトを誤って「安全」とすることなく、これらの問題の両方を修正する必要があります。セキュリティを向上させようとすると、ユーザーの作業量が増加します。

Platform Launch を使用し、さらに CSP を適用すると、他のスクリプトを誤って「安全」とすることなく、これらの問題の両方を修正する必要があります。このドキュメントの残りの部分では、これを実現する方法に関するガイダンスを提供します。

Platform Launch を追加信頼できるソースとして追加する

CSP を使用する場合は、信頼されたドメインを Content-Security-Policy ヘッダーの値に含める必要があります。Platform Launch に指定する値は、使用しているホスティングのタイプによって異なります。

自己ホスト

ライブラリを自己ホストしている場合、ライブラリのソースはおそらくユーザー自身のビルドになります。次の設定を使用して、ホストドメインが安全なソースであることを指定できます。

HTTP ヘッダー

Content-Security-Policy: script-src 'self'

HTML <meta>タグ

<meta http-equiv="Content-Security-Policy" content="script-src 'self'">

アドビ管理ホスティング

アドビ管理ホストを使用している場合、assets.adobedtm.com でビルドが保持されます。既に読み込んでいるスクリプトを壊さないよう、安全なドメインとして self を指定する必要がありますが、assets.adobedtm.com を安全としてリストする必要もあります。そうしないと、Platform Launch ライブラリがページに読み込まれません。この場合、次の設定を使用する必要があります。

HTTP ヘッダー

Content-Security-Policy: script-src 'self' assets.adobedtm.com

HTML <meta>タグ

非常に重要な前提条件があります。Platform Launch ライブラリは非同期で読み込む必要があります。Platform Launch ライブラリの同期読み込みでは動作しません(コンソールエラーやルールが正しく実行されない原因となります)。

<meta http-equiv="Content-Security-Policy" content="script-src 'self' assets.adobedtm.com">

既に読み込んだスクリプトが引き続き機能するよう、安全なドメインとして self を指定する必要がありますが、assets.adobedtm.com を「安全」としてもリストする必要があります。そうしない場合、ライブラリビルドがページに読み込まれません。

インラインスクリプト

CSP はデフフォルトでインラインスクリプトを許可しないため、インラインスクリプトを許可するには手動で設定する必要があります。インラインスクリプトを許可するには、次の 2 つのオプションがあります。

メモ

CSP の仕様には、ハッシュを使用する 3 つ目のオプションの詳細が含まれていますが、この方法は、Platform Launch のようなタグ管理システムでは使用できません。Platform Launch でのハッシュの使用制限の詳細については、Subresource Integrity(SRI)のガイドを参照してください。

nonce で許可

この方法では、暗号化 nonce を生成して、CSP およびサイト上のすべてのインラインスクリプトに追加します。ブラウザーは、nonce を含むインラインスクリプトを読み込む命令を受け取ると、nonce 値と CSP ヘッダー内に含まれる値を比較します。一致すると、スクリプトが読み込まれます。この nonce は、新しいページが読み込まれるたびに変更される必要があります。

重要

この方法を使用するには、ビルドを非同期で読み込む必要があります。ビルドを同期的に読み込む際にはこれが動作しないため、コンソールのエラーやルールが正しく実行されません。詳しくは、非同期デプロイメントのガイドを参照してください。

次の例は、アドビ管理ホストの CSP 設定に nonce を追加する方法を示しています。自己ホスティングを使用している場合は、assets.adobedtm.com を除外できます。

HTTP ヘッダー

Content-Security-Policy: script-src 'self' assets.adobedtm.com 'nonce-2726c7f26c'

HTML <meta>タグ

<meta http-equiv="Content-Security-Policy" content="script-src 'self' assets.adobedtm.com 'nonce-2726c7f26c'">

ヘッダーまたは HTML タグを設定したら、インラインスクリプトを読み込む際に nonce を見つける場所を Platform Launch に伝える必要があります。Platform Launch でスクリプトの読み込み時に nonce を使用するには、以下を実行する必要があります。

  1. データレイヤー内の nonce の位置を参照するデータ要素を作成します。
  2. コア拡張機能を設定し、使用したデータ要素を指定します。
  3. データ要素とコア拡張機能の変更を公開します。
メモ

上記のプロセスは、カスタムコードが何を実行するかではなく、カスタムコードの読み込みのみを処理します。CSP に準拠していないカスタムコードがインラインスクリプトに含まれている場合は、CSP が優先されます。例えば、カスタムコードを使用してインラインスクリプトを DOM に追加して読み込む場合、Platform Launch はそれつけたり、nonce を正しく追加したりできないので、特定のカスタムコードアクションが期待どおりに動作しません。

すべてのインラインスクリプトを許可する

nonce の使用が機能しない場合は、すべてのインラインスクリプトを許可するよう CSP を設定できます。このオプションの安全性はあまり高くありませんが、実施やメンテナンスは容易です。

次の例は、CSP ヘッダー内のすべてのインラインスクリプトを許可する方法を示しています。

自己ホスト

自己ホスティングを使用する場合は、次の設定を使用します。

HTTP ヘッダー

Content-Security-Policy: script-src 'self' 'unsafe-inline'

HTML <meta>タグ

<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'">

アドビ管理ホスティング

アドビ管理ホスティングを使用している場合は、次の設定を使用します。

HTTP ヘッダー

Content-Security-Policy: script-src 'self' assets.adobedtm.com 'unsafe-inline'

HTML <meta>タグ

<meta http-equiv="Content-Security-Policy" content="script-src 'self' assets.adobedtm.com 'unsafe-inline'">

次の手順

このドキュメントでは、Platform Launch ライブラリファイルとインラインスクリプトを受け入れるよう CSP ヘッダーを設定する構成する方法について説明します。

追加のセキュリティ対策として、Subresource Integrity(SRI)を使用して、取得したライブラリビルドを検証することもできます。ただし、この機能をタグ管理システム(Platform Launch など)で使用する場合、いくつかの大きな制限があります。詳しくは、 Platform Launch](/docs/launch/using/client-side-info/sri.html?lang=ja) での [SRI の互換性に関するガイドを参照してください。

このページ

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now