コンテンツセキュリティポリシー
コンテンツセキュリティポリシー(CSP)は、信頼できないソースからのコンテンツの読み込みや実行からブラウザーを保護するためのセキュリティレイヤーとして使用します。 このポリシーは、クロスサイトスクリプティング(XSS)攻撃、データインジェクション攻撃など、ブラウザー経由でアプリケーションに行われる特定の種類の攻撃を検出し、軽減するのに役立ちます。
ブラウザーでページを読み込む場合は、スタイルシート、フォント、JavaScriptファイルなどのアセットを含めるように指示されます。 ブラウザーには、アプリケーションの一部であるスクリプトと、第三者によって悪意を持って注入されたスクリプトを区別する方法がありません。 その結果、悪意のあるコンテンツがアプリケーションに読み込まれる可能性があります。 CSPは、このような攻撃からアプリケーションを保護するのに役立ちます。
CSPは、ユーザーのブラウザーで読み込むことのできる承認済みのコンテンツソースを定義する一連のディレクティブです。 このディレクティブは、Content-Security-Policy HTTP応答ヘッダーでクライアントに送信されます。 各ブラウザーの種類とバージョンは、可能な限りポリシーに従います。 ブラウザーがディレクティブを理解できない場合、そのディレクティブは無視されます。 その他の状況では、ポリシーに明示的に従います。 各ディレクティブは、ブラウザーに表示される内容に影響を与える特定のリソースタイプを管理します。 一意のコンテンツの特定の部分を参照する特別なURLスキーム(data:、blob:、filesystem:など)は、任意のURLのポリシーに一致しないため、明示的に一覧表示する必要があります。
CSPは、Securityカテゴリー内のRule-Access-CSPクラスのインスタンスです。
アプリケーションのコンテンツセキュリティポリシーにアクセスするには、次の操作を行います。
- アプリケーションエクスプローラを使用して、アプリケーションのコンテンツセキュリティポリシーを一覧表示します。
- Records Explorerを使用して、利用可能なすべてのコンテンツセキュリティポリシーを一覧表示します。
「Application rule」フォームのIntegration & securityタブで、コンテンツセキュリティポリシーを指定できます。
コンテンツセキュリティポリシーのMode(上のスクリーンショットを参照)で選択された値は、ポリシーを適用するか、単にポリシーの使用状況を報告するだけかを決定します。
- Reject and report - ポリシーを適用する
- Report only – 報告するが、ポリシーを適用しない
コンテンツセキュリティポリシーは、アプリケーション内のコンテンツを許可リストに登録したソースのみに制限することで、さまざまなセキュリティ上の脅威にさらされるリスクを削減できます。
Content Security PolicyのModeがレポートのみに設定されている場合、Pegaは「Application rule」フォームに以下のガードレールワーニングをスローします。
This application's Content Security Policy mode has been left in Report-Only mode. This mode will not restrict content on your user's browsers, greatly weakening the policy's usefulness. The policy mode should be set to Reject and Report mode.
アプリケーションのセキュリティを強化するために、Content Security Policyのモードを「拒否してレポート」に設定することがベストプラクティスです。
Content Security Policyが適用されている場合、ブラウザーはスクリプトやリソースの実行をブロックし、ブラウザーコンソールに以下のメッセージを表示します。
Content Security Policy of your site blocks some resources because their origin is not included in the content security policy header
The Content Security Policy (CSP) improves the security of your site by defining a list of trusted sources and instructs the browser to only execute or render resources from this list. Some resources on your site can't be accessed because their origin is not listed in the CSP.
これを解決するには、以下に一覧表示されたブロックされたリソースがすべて信頼できるものかどうかを注意深く確認し、信頼できる場合は、そのソースをサイトのコンテンツセキュリティポリシーに含めます。 ポリシーは、HTTPヘッダー(推奨)またはHTML<meta>タグを介して設定できます。
以下の画像は、Google Mapsが信頼できるソースとして追加されておらず、アプリケーションがGoogle Mapsを参照している場合に、ブラウザーコンソールに表示されるエラーメッセージの例です。
Refused to load the script 'http://maps.googleapis.com/maps/api/js?v=3&key=AIzaSyD1k79C-9eU80kfMdyR-8k3ZcqswwmPgM4&sensor=true&callback=pega.ui.maps.mapsScriptLoaded' because it violates the following Content Security Policy directive: "script-src 'unsafe-inline' 'unsafe-eval' 'self' http://www.google-analytics.com https://ssl.google-analytics.com https://unpkg.com/swagger-ui-dist@3/swagger-ui-bundle.js". Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.
ベストプラクティスとして、ワーニングを非表示にするためにPegaのout-of-the-box機能のpxDefaultAllowAllまたはpxDefaultSecuredを使用するのではなく、カスタマイズされたコンテンツセキュリティポリシーを開発します。
コンテンツセキュリティポリシーの設定方法の詳細については、ヘルプトピック「コンテンツセキュリティポリシーフォームのポリシー定義タブ」を参照してください。