コンテンツセキュリティポリシー (CSP) は、クロスサイトスクリプティング (Cross-site_scripting) やデータインジェクション攻撃などのような、
特定の種類の攻撃を検知し、影響を軽減するために追加できるセキュリティレイヤー
です。これらの攻撃はデータの窃取からサイトの改ざん、マルウェアの拡散に至るまで、様々な目的に用いられます。
- 特定の種類の攻撃を検知し、影響を軽減するために追加できるセキュリティレイヤー
CSP は完全な後方互換性を保って設計されています(ただし、 CSP 2 については後方互換性がない点もあり、明示的に記述されています。詳細はこちらの 1.1 章を参照してください)。
CSP に対応していないブラウザーは CSP を無視し、通常通り機能
します。CSP が追加するようなさらなる制限はなく、標準の同一オリジンポリシーの保護のみが適用されます。
- CSP に対応していないブラウザーは CSP を無視し、通常通り機能になる
CSP を有効にするには、
ウェブサーバーから Content-Security-Policy HTTP ヘッダーを返すように設定
する必要があります(X-Content-Security-Policy ヘッダーに関する記述が時々ありますが、これは古いバージョンのものであり、今日このヘッダーを指定する必要はありません)。
- このヘッダーを指定する必要はありません
- WEBサーバーに関連する
コンテンツ・セキュリティ・ポリシー・ヘッダーを使用すると、
従業員のかわりにリクエスト可能なリソースを開発者が制御
できるので、コンテンツ・インジェクションのリスクが軽減
されます。コンテンツ・セキュリティ・ポリシーとは、
Webアプリケーションのクライアント側リソース用にJavaScript、CSS、イメージなどのソース・ホワイトリストを作成できる、ブラウザ側のメカニズム
です。コンテンツ・セキュリティ・ポリシーは、そのようなソースからのリソースのみを実行またはレンダリングするように、特別なHTTPヘッダーを使用してブラウザに指示
します。
- ソースからのリソースのみを実行またはレンダリングするように、特別なHTTPヘッダーを使用してブラウザに指示
index.htmlに記載されている
すべての外部リソースのうち、CSPに違反していないリソースのみ読み込みと実行
が行われます。上の画像の例では、img-src ‘self’と指定されているため、同一オリジンからの画像リソースのみ許可され、https://bbb.com/BBB.jpg の読み込みは拒否されます。
また、script-src nonce-xxxxと指定されているため、nonce値(※nonceの詳細は後述)が一致するccc.jsはスクリプトが実行されますが、ddd.js はnonce値がなくCSP違反となるため実行されません。
※仮にinlineでスクリプトが記載されていても、CSP違反の場合は実行はされません。
Webサーバーは、エンド・ユーザーのWebアプリケーションがスタイルシートやイメージなどをロードできるドメインのリストを把握していないため、コンテンツ・セキュリティ・ポリシーを実装するのは不可能です。Webサーバーは、アプリケーションがプラグインやメディアなどを使用するかどうかや、これらをロードできるかどうかも把握していません。
オラクル社では、コンテンツ・セキュリティ・ポリシー・ヘッダーを使用して、アプリケーション特性に基づくポリシーを定義および実装することをお薦めしています。
コンテンツ・セキュリティ・ポリシー・ルールの使用例を次に示します:
例: ルール1
Content-Security-Policy: default-src 'self'
これは制限的なルールであり、次のようなアプリケーションで機能します:
すべてのリソースが、指定したページの同じドメインでホストされます。
スクリプトおよびスタイル・リソースに対するインラインまたは評価がありません。
例: ルール2
Content-Security-Policy: default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self'; style-src 'self';
このポリシーの内容:
オブジェクト、フレーム、メディアなどのリソースのロードを許可しません。
同じ起点からのイメージ、スクリプト、AJAXおよびCSSを許可します。
例: ルール3
Content-Security-Policy: frame-ancestors self;
感想
説明への理解が難しい。
これは古いバージョンのものであり、今日このヘッダーを指定する必要はありません
と書いてあり必要なのか必要じゃないのかわからなかった。
どう言う分野を知っていれば理解できるのか?