CSPの設定

​ コンテンツセキュリティポリシー (CSP)は、ブラウザーが使用できるリソースを制限するために使用されます。 CSPでは、スクリプトおよびスタイルリソースの機能を制限することもできます。 Adobe Experience Platform Web SDKにはCSPは必要ありませんが、CSPを追加すると、悪意のある攻撃を防ぐために攻撃サーフェスを軽減できます。

CSPは、Experience Platform Web SDKのデプロイと設定方法を反映する必要があります。 次のCSPは、SDKが適切に機能するために必要な変更を示しています。 特定の環境によっては、CSPの追加設定が必要になる場合があります。

コンテンツセキュリティポリシーの例

次に、CSPの設定方法を示します。

エッジドメインへのアクセスを許可

default-src 'self';
connect-src 'self' EDGE-DOMAIN

上記の例では、EDGE-DOMAINを1st パーティドメインに置き換える必要があります。 1st パーティドメインは、edgeDomain設定に設定されています。 1st パーティドメインが設定されていない場合、EDGE-DOMAIN*.adobedc.netに置き換える必要があります。 idMigrationEnabledを使用して訪問者の移行を有効にする場合、connect-src ディレクティブにも*.demdex.netを含める必要があります。

NONCEを使用して、インラインスクリプトとスタイル要素を許可する

Experience Platform Web SDKはページコンテンツを変更でき、インラインスクリプトとスタイルタグを作成するには承認が必要です。 これを実現するために、Adobeでは、default-src CSP ディレクティブにnonceを使用することをお勧めします。 Nonceは、サーバーが生成した暗号学的に強力なランダムトークンで、一意のページビューごとに1回生成されます。

default-src 'nonce-SERVER-GENERATED-NONCE'

さらに、CSP インスタンスをWeb SDK 基本コード ​の属性として追加する必要があります。 Web SDKでは、インラインスクリプトまたはスタイルタグをページに追加する際に、このnonceを使用します。

<script nonce="SERVER-GENERATED-NONCE">
  !function(n,o){o.forEach(function(o){n[o]||((n.__alloyNS=n.__alloyNS||
  []).push(o),n[o]=function(){var u=arguments;return new Promise(
  function(i,l){n[o].q.push([i,l,u])})},n[o].q=[])})}
  (window,["alloy"]);
</script>

nonceが使用されない場合、他のオプションはunsafe-inlinescript-srcおよびstyle-src CSP ディレクティブに追加することです。

script-src 'unsafe-inline'
style-src 'unsafe-inline'
NOTE
Adobeでは、CSPのメリットを制限するスクリプトをページ上で実行できるため、not​ではunsafe-inlineを指定することをお勧めします。

アプリ内メッセージ用のCSPの設定 in-app-messaging

Web アプリ内メッセージを設定する場合は、CSPに次のディレクティブを含める必要があります。

default-src  blob:;
recommendation-more-help
experience-platform-help-collection