OWASP ZAPで検知されたContent Security Policy(CSP)とは? Apacheでの設定・対応例
目次
こんにちは。飯塚です。
システム開発の脆弱性検証として、OWASP ZAP を使うことがあります。検知された各脆弱性を理解するため、本記事にまとめました。
本記事の内容は、すべての脆弱性を完全に防げることを保証するものではありません。あらかじめご了承ください。
OS, Apache, OWASP ZAPのバージョン
| 項目 | バージョン |
|---|---|
| OS | Debian GNU/Linux 12 (bookworm) |
| Apache | 2.4.XX |
| OWASP ZAP | 2.15.0 |
Content Security Policy (コンテンツセキュリティポリシー) とは
Content Security Policy は直訳すると、コンテンツのセキュリティ規定という意味です。HTML, JavaScript, CSS, 画像, フォントなどのコンテンツをどこから参照可能なのか規定することで、セキュリティを強化する仕組みです。
第一の目的はクロスサイトスクリプティングの軽減であり、他にもデータインジェクション攻撃やパケット盗聴攻撃の対策としても効果があります。
コンテンツの参照元を最小限に絞ることで、悪意を持ったコンテンツの介入を防ぐことができる、という仕組みです。
ウェブサーバーから Content-Security-Policy HTTP ヘッダーを返すように設定することで、コンテンツセキュリティポリシーが有効になります。
参考
【MDN】コンテンツセキュリティポリシー (CSP)
【MDN】Content-Security-Policy (CSP) ヘッダー
コンテンツセキュリティポリシーの設定例
最もシンプルな例
すべてのコンテンツをサイト自身のドメイン(サブドメインを除く)から取得させたい場合の設定です。
Content-Security-Policy: default-src 'self'
default-src は平たくいってしまえば、デフォルトですべてのコンテンツが対象、という意味です。
‘self’ は読んで字の通り、同じオリジンから読み込まれたもののみ許可する、という意味です。
コンテンツごとに設定を分ける例
画像はどこからでも取得してもOKですが、スクリプトは指定ドメインからのみ、他は同オリジンからのみになります。
Content-Security-Policy: default-src 'self'; img-src *; script-src example.com
システムの要件や構成に合わせて、ディレクティブとソースの組み合わせを調整します。
Apache による Content-Security-Policy ヘッダー付与の対応例
Apache のフォルダ構成
/etc/apache2
|-- apache2.conf
|-- /conf-available
|-- security.conf
Apache の対応
/conf-available/security.conf に Content-Security-Policyヘッダー を適切に設定します。以下は設定例です。
Header always set Content-Security-Policy "frame-ancestors 'self'; script-src 'self' 'sha256-***'; style-src 'self' 'sha256-***' https://cdn.jsdelivr.net https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com https://cdn.jsdelivr.net; form-action 'self' ;img-src 'self'; connect-src 'self'; frame-src 'self'; media-src 'self'; object-src 'self'; manifest-src 'self';"
‘sha256-***’ はハッシュ値です。コンテンツセキュリティポリシーを設定後に再読み込みすると、このハッシュ値を使用するようブラウザのコンソールにメッセージが表示されるので、それを使用します。
ハッシュ値を使用する場合は、コンテンツに変更を加えるたびに、ハッシュ値を更新する必要があるので注意が必要です。
まとめ
いかがでしたでしょうか。
業務で脆弱性対応をするまで、コンテンツセキュリティポリシーについては、これまで何となくしか知らなかったため、非常に勉強になりました。設定が多く複雑に見えますが、MDNを落ち着いてよく読めば対応できそうです。
OWASP ZAPで検知された他の脆弱性についても、今後も記事にしていく予定です。参考になれば幸いです。
《関連記事》
アシスタントリーダー Iizuka 技術の入門・まとめ系を中心に書いてます。あとで読み返したいと感じていただける記事を目指しています。

