Content Security Policy (CSP) はセキュリティ対策における追加レイヤーであり、クロスサイトスクリプティング (XSS) やデータインジェクション攻撃を含む、よく知られた種類の攻撃を検出して軽減するためのものです。これらの攻撃手法は様々な目的に用いられ、データの窃取からサイト改変、マルウェアの拡散にまで及びます。
CSP は完全な後方互換性を保って設計されています。CSP 未対応のブラウザは CSP 実装済のサーバと通信できるうえ、逆に CSP 対応のブラウザも CSP 未実装のサーバと通信が行えます。CSP 未対応のブラウザは単純に CSP を無視し、Web コンテンツに対しては通常通り 同一オリジンポリシー (same-origin policy) を適用します。CSP ヘッダを返さない Web サイトに対しても同様に、ブラウザは通常通り 同一オリジンポリシー を適用します。
CSP を Web サイトに適用するのは簡単で、Web サーバから Content-Security-Policy
HTTP ヘッダを返すように設定するだけで有効にできます(Firefox 23 以前は X-Content-Security-Policy
ヘッダを使用していました)。CSP を設定し有効にする方法については Content Security Policy の利用方法 で詳しく説明します。
<meta>
要素を用いてもポリシーを設定できます。この機能は Firefox 45 からサポートされています。
クロスサイトスクリプティングの軽減
CSP で中心となる目的は XSS 攻撃の軽減と報告です。XSS 攻撃は、サーバから受信したコンテンツをブラウザが信頼する性質を利用します。コンテンツが表示されているサイトとは別の場所からのものであっても、ブラウザはコンテンツが表示されているサイトを信頼するため、悪意のあるスクリプトが被害者のブラウザで実行されてしまいます。
実行可能なスクリプトを配信できるドメインを CSP で指定すれば、スクリプトの正当性をブラウザが検証できるようになるため、サーバ管理者は XSS の要因を減少させたり、場合によっては根絶できるようになります。CSP 互換のブラウザは、ホワイトリストに含まれたドメインから受信したスクリプトだけを実行し、その他のスクリプト(インラインスクリプトやイベントを扱う HTML 属性を含む)をすべて無視します。
究極的な防御策として、サイト上でスクリプトの実行を許可したくなければ、スクリプトの実行を全面的に禁止することもできます。
パケット盗聴攻撃の軽減
読み込むコンテンツのドメインを制限することに加えて、使用できるプロトコルもサーバ側から指定できます。例えば(理想的なセキュリティ対策として)、すべてのコンテンツが HTTPS で読み込まれるようにサーバから指定することが可能です。
secure
フラグをセットしたり、HTTP ページから対応する HTTPS ページへの自動リダイレクトも検討する必要があります。