【しーえすぴー】

CSP(コンテンツセキュリティポリシー) とは?

最終更新:
💡 ページの読み込みと実行に、許可の方針を示す

Webページのリソース読み込みやスクリプト実行などをブラウザーで制御する方針。CSPの指定、nonce・ハッシュ、Report-Onlyと違反報告を解説します。

📌 このページのポイント
CSP:ブラウザーが許可の方針を適用サイトのページと方針例:script-src 'self'ブラウザーがスクリプトを確認この例は同じオリジンを許可同じオリジン許可許可していない制限Report-Onlyは監視のみ・強制しないXSSの通常の対策と組み合わせる
通常のCSPの指定例で、nonce・ハッシュは省略しています。この一行は画像など全種類を制限せず、許可されたスクリプトの安全性を証明するものでもありません。
ひよこ ひよこ
CSPは、何を制限する?
ペンギン先生 ペンギン先生
ページが読み込む画像やスクリプト、スクリプトの実行などに許可の方針を示すよ。ブラウザーがその方針を適用する。XSSの被害を抑える防御の一つで、アプリ側の出力エスケープや安全なDOM操作まで不要になるわけではないんだ。
ひよこ ひよこ
どう書けば、意味が分かる?
ペンギン先生 ペンギン先生
説明用に `Content-Security-Policy: script-src 'self'` を考えよう。同じオリジンのスクリプトを許可する指定だよ。この一行だけで画像など全種類を制限したり、同じオリジンの全スクリプトが安全と証明したりするわけではない。
ひよこ ひよこ
CSPがあれば、インラインは全部禁止?
ペンギン先生 ペンギン先生
script-srcか、代わりに使うdefault-srcを指定した方針では、追加の許可がなければインラインのJavaScriptが制限される。CSPという名前のヘッダーがあるだけで、常に同じ制限になるわけではないよ。許可する内容を確認するんだ。
ひよこ ひよこ
必要なインライン処理は、どうする?
ペンギン先生 ペンギン先生
script要素の処理は、nonceやハッシュで許可する方法がある。nonceは応答ごとに生成する予測できない値を、方針と対象の要素へ設定するよ。ハッシュは内容に対応する値なので、処理を変えたら更新が必要。onclickなどの属性を同じ方法でそのまま許可できるわけではない。
ひよこ ひよこ
いきなりブロックしても、大丈夫?
ペンギン先生 ペンギン先生
まずContent-Security-Policy-Report-Onlyで影響を調べる方法がある。その方針では監視だけで制限を強制しない。実際の画面や機能を確認し、必要な読み込みと報告を整理してから、適用する方針へ進めるよ。
もっと詳しく知りたい人へ

Report-Onlyを書けば、通知も自動で届く?

違反を受け取る先の設定が必要です。report-toとReporting-Endpointsを使う方法があり、旧report-uriとの対応も確認します。ブラウザーの対応や報告の届き方を含め、記録がないだけで違反なしと決めません。

metaタグでも、同じ設定ができる?

一部のCSPはmetaタグで指定できますが、Report-Only、frame-ancestorsやreport-uriなどはmetaで同じように使えません。配信できる応答ヘッダーと、制御したい内容を確認します。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「CSP」って出てきたら「ページのリソース読み込みやスクリプト実行を、ブラウザーで制御する方針」と思えばだいたいOK!
📖 おまけ:英語の意味
「Content Security Policy」 = コンテンツのセキュリティ方針
💬 読み込み元だけでなく、スクリプトを許可するnonceやハッシュ、埋め込みなどの条件も扱います。方針を設定しただけで、すべての脆弱性がなくなるわけではありません。

参考資料

← 用語集にもどる