メモ
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 をオフにするには、次の手順に従います。
サイト ビルダーで、作業しているサイトを選択します。
サイト設定を選択し、拡張タブを選択します。
コンテンツ セキュリティ ポリシー タブで、コンテンツ セキュリティ ポリシーを無効にするチェック ボックスを選択します。
保存と公開を選択します。
レポートのみモードの有効化
CSP を有効にした場合、ブラウザーはコンテンツ セキュリティ ポリシーを適用しません。 ただし、report-uri ディレクティブで指定された URI への違反を報告します。
レポートのみのモードを有効にするには、次の手順に従います。
- サイト ビルダーで、作業しているサイトを選択します。
- サイト設定を選択し、拡張タブを選択します。
- コンテンツ セキュリティ ポリシー タブで、レポートのみのモードの有効化チェック ボックスを選択します。
Nonce を有効にする
nonce (1 回使用した数) を有効にすると、インライン スクリプト モジュール内で指定されたスクリプトを除くすべての インライン スクリプト の実行がブロックされます。 一意の暗号 Nonce が生成され、CSP ヘッダーで特定された各スクリプトに追加されます。
nonce を有効にするには、次の手順に従います。
- サイト ビルダーで、作業しているサイトを選択します。
- サイト設定を選択し、拡張タブを選択します。
- コンテンツ セキュリティ ポリシー タブで、Nonce の有効化チェック ボックスを選択します。
コマースの CSP ディレクティブ
コマース サイトでは、次の CSP ディレクティブを使用します。
| ディレクティブ | 説明 |
|---|---|
| child-src | このディレクティブは、web worker の有効なソースと、<<要素が読み込まれる入れ子になった参照コンテキスト>定義します。 |
| connect-src | このディレクティブは、AJAX 要求を行うことができる URL を定義します。 |
| font-src | このディレクティブは、フォントの有効なソースを定義します。 |
| frame-ancestors | このディレクティブは、<><>、または <applet> 要素を使用してページを埋め込むことができる有効な親を指定します。 このディレクティブを "none" に設定することは、古いブラウザーでもサポートされている "X-Frame-Options: DENY" ディレクティブの指定に似ています。 |
| frame-src | このディレクティブは、 |
| 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 ディレクティブを設定する方法を示しています。
サイト ビルダーで、作業しているサイトを選択します。
サイト設定を選択し、拡張タブを選択します。
[ コンテンツ セキュリティ ポリシー ] タブ の script-src で、[ 追加] を選択し、呼び出す外部スクリプトの完全な URL を入力します。
保存と公開を選択します。
CSP エラーの解釈と修正
最初にサイトの CSP を構成するときに、一部のページがまったく読み込まれていないか、意図したとおりに動作しない可能性があります。 CSP は、外部接続、スクリプト、フォント、およびその他の種類のリソースの読み込みをブロックします。 幸いにも、CSP は不必要または不要な要求を修正、調整、およびクリーンアップするために使用できる、有用なエラーをいくつかログに記録します。
次の図では、Web ブラウザーの開発ツールにおける CSP エラーの例を示しています。
この例では、次の 2 つの CSP エラーがあります。
- Eval 関数は、任意の JavaScript を実行する可能性があるため、既定ではブロックされています。 この機能を許可するには、'unsafe-eval' をサイトのscript-src ディレクティブに追加してください。 単一の引用符が必要です。
- 外部スタイルシートがブロックされています。 スタイルシートを外部ドメインから読み込むには、URL をサイトのスタイル -src ディレクティブに追加します。
次のスクリーンショットでは、コマースにて 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
}
}