次の方法で共有


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

メモ

Dynamics 365 Commerce のリテール・インタレスト・グループは、Yammer から Viva Engage に移転しました。 新しい Viva Engage コミュニティにアクセスできない場合は、このフォーム (https://aka.ms/JoinD365commerceVivaEngageCommunity) に入力して追加し、最新のディスカッションに参加してください。

この記事では、Microsoft Dynamics 365 Commerce のコンテンツ セキュリティ ポリシー (CSP) を管理する方法について説明します。

CSP は、一部の種類の Web 攻撃を検出して軽減するのに役立つセキュリティの追加レイヤーです。 これらの攻撃の目的は、データの盗用からサイトの変造やマルウェアの配布まで多岐に指定できます。 CSP は、サイトページに読み込むことができるリソースを制御するのに役立つ、広範なポリシー ディレクティブのセットを提供します。 各ディレクティブは、特定のタイプのリソースに対する制限を定義します。

eコマース サイトで CSP を有効にすると、不明または悪意のあるソースからの接続、スクリプト、フォント、その他の種類のリソースをブロックすることで、セキュリティを強化できます。 Dynamics 365 Commerce では、CSP が既定で有効になります。 ただし、ほとんどのサイトには追加の構成が必要です。 Dynamics 365 Commerce オンライン ソフトウェア開発キット (SDK) には、スタイル、スクリプト、およびアプリケーション プログラミング インターフェイス (API) 呼び出しで使用できる許可されるソース URL の既定の一覧が用意されています。 サイトビルダー ツールの拡張タブで、このリストを編集できます。

CSP の詳細については、Content Security Policy Reference を参照してください。

CSP 設定

サイトの CSP を無効

CSP がサイトにポリシーを適用できないようにするには、サイト ビルダーでそのサイトに対してポリシーを無効にします。

サイトの CSP をオフにするには、次の手順に従います。

  1. サイト ビルダーで、作業しているサイトを選択します。

  2. サイト設定を選択し、拡張タブを選択します。

  3. コンテンツ セキュリティ ポリシー タブで、コンテンツ セキュリティ ポリシーを無効にするチェック ボックスを選択します。

    [コンテンツ セキュリティ ポリシー] タブの [コンテンツ セキュリティを無効にする] チェック ボックスのスクリーンショット。

  4. 保存と公開を選択します。

レポートのみモードの有効化

CSP を有効にした場合、ブラウザーはコンテンツ セキュリティ ポリシーを適用しません。 ただし、report-uri ディレクティブで指定された URI への違反を報告します。

レポートのみのモードを有効にするには、次の手順に従います。

  1. サイト ビルダーで、作業しているサイトを選択します。
  2. サイト設定を選択し、拡張タブを選択します。
  3. コンテンツ セキュリティ ポリシー タブで、レポートのみのモードの有効化チェック ボックスを選択します。

Nonce を有効にする

nonce (1 回使用した数) を有効にすると、インライン スクリプト モジュール内で指定されたスクリプトを除くすべての インライン スクリプト の実行がブロックされます。 一意の暗号 Nonce が生成され、CSP ヘッダーで特定された各スクリプトに追加されます。

nonce を有効にするには、次の手順に従います。

  1. サイト ビルダーで、作業しているサイトを選択します。
  2. サイト設定を選択し、拡張タブを選択します。
  3. コンテンツ セキュリティ ポリシー タブで、Nonce の有効化チェック ボックスを選択します。

コマースの CSP ディレクティブ

コマース サイトでは、次の CSP ディレクティブを使用します。

ディレクティブ 説明
child-src このディレクティブは、web worker の有効なソースと、<<要素が読み込まれる入れ子になった参照コンテキスト>定義します。
connect-src このディレクティブは、AJAX 要求を行うことができる URL を定義します。
font-src このディレクティブは、フォントの有効なソースを定義します。
frame-ancestors このディレクティブは、<><>、または <applet> 要素を使用してページを埋め込むことができる有効な親を指定します。 このディレクティブを "none" に設定することは、古いブラウザーでもサポートされている "X-Frame-Options: DENY" ディレクティブの指定に似ています。
frame-src このディレクティブは、入れ子になったブラウジング コンテキストの読み込みに有効なソースを、 frame や iframe などの要素を使って定義します。
img-src このディレクティブは、画像の有効なソースを定義します。
media-src このディレクティブは、HTML5 <audio> および <video> 要素などのオーディオおよびビデオの有効なソースを定義します。
object-src このディレクティブは、<object><embed>、および <applet> 要素などのプラグインの有効なソースを定義します。
report-uri このディレクティブは、ブラウザーが CSP 違反レポートを投稿する URI を定義します。 これらの違反レポートは、HTTP POST 要求を介して指定された URI に送信される JSON ドキュメントで構成されます。
script-src このディレクティブは、JavaScript の有効なソースを定義します。
style-src このディレクティブは、stylesheets の有効なソースを定義します。

例: CSP ディレクティブのコンフィギュレーション

次の例の手順は、サイトから外部スクリプトを呼び出すことができるように、CSP ディレクティブを設定する方法を示しています。

  1. サイト ビルダーで、作業しているサイトを選択します。

  2. サイト設定を選択し、拡張タブを選択します。

  3. [ コンテンツ セキュリティ ポリシー ] タブ の script-src で、[ 追加] を選択し、呼び出す外部スクリプトの完全な URL を入力します。

    [コンテンツ セキュリティ ポリシー] タブの外部スクリプトの URL のスクリーンショット。

  4. 保存と公開を選択します。

CSP エラーの解釈と修正

最初にサイトの CSP を構成するときに、一部のページがまったく読み込まれていないか、意図したとおりに動作しない可能性があります。 CSP は、外部接続、スクリプト、フォント、およびその他の種類のリソースの読み込みをブロックします。 幸いにも、CSP は不必要または不要な要求を修正、調整、およびクリーンアップするために使用できる、有用なエラーをいくつかログに記録します。

次の図では、Web ブラウザーの開発ツールにおける CSP エラーの例を示しています。

Web ブラウザーの開発者ツールにおける CSP エラー。

この例では、次の 2 つの CSP エラーがあります。

  • Eval 関数は、任意の JavaScript を実行する可能性があるため、既定ではブロックされています。 この機能を許可するには、'unsafe-eval' をサイトのscript-src ディレクティブに追加してください。 単一の引用符が必要です。
  • 外部スタイルシートがブロックされています。 スタイルシートを外部ドメインから読み込むには、URL をサイトのスタイル -src ディレクティブに追加します。

次のスクリーンショットでは、コマースにて Content Security Policy タブの固定設定がどのように表示されるか示します。

Content Security Policy タブの固定設定。

CSPを使用するページのモックアップの更新

開発環境でオンライン SDK を使用してモジュールをテストする場合、ページ モックを使用して CSP を追加することもできます。 ページ モックでは、トップ レベルの "appContext" プロパティを追加するか、または既存のトップレベルの "appContext" プロパティに移動して、"contentSecurityPolicy" という名前のプロパティを作成する必要があります。 次の例に示すように、ディレクティブのキーと値のペアをポリシーに追加します。

"appContext": {
	"contentSecurityPolicy": {
		"script-src": ["https://www.w3schools.com/js/myScript.js"],
		"font-src": ["https://*.commerce.dynamics.com"]
	}
}

メモ

ページ モックに CSP ポリシーを追加した場合、ページ モックには、プラットフォームが提供する既定の CSP ポリシーは含まれません。

ページ モックで CSP を無効にするには、次のコードを使用します。

"appContext": {
	"contentSecurityPolicy": {
		"disableContentSecurityPolicy": true
	}
}

追加リソース

E コマース ユーザーとロールの管理

サイト ページにスクリプト コードを追加してテレメトリをサポートする

サイトにおける検索エンジン最適化 (SEO) の考慮事項