-
Notifications
You must be signed in to change notification settings - Fork 0
MS_ContentSecurityPolicy
- 戻る(セキュリティ強化のHTTPヘッダ)
- Content-Security-Policy
- CORS (Cross-Origin Resource Sharing)
特定の種類の攻撃を検知し、
- データの窃取から
- サイトの改ざんによるマルウェアの拡散
など影響を軽減するために追加できるセキュリティレイヤー
-
Content-Security-Policy: W3C 仕様の標準ヘッダー。
-
Firefox 23 以上、Chrome 25 以上、および Opera 19 以上でサポート。
-
以下のようなポリシーを設定し、それを Web ブラウザに強制させる。
- ロード可能なスクリプトを制限する
- インライン記述のスクリプトの実行を禁止する
コンテンツの
- 提供元(URL)
- 取得方法(HTTPS 経由のみなど)
を制限することで、
- 攻撃者のコンテンツを読み込ませることを阻止し、
- 結果として、コンテンツに対する攻撃を軽減する。
補足(CSP は「二の矢」): CSP は XSS の穴を塞ぐものではなく、
穴があったときに被害を抑えるための多層防御である。
攻撃者がスクリプトを注入できたとしても、
- インライン スクリプトが実行されない
- 攻撃者のドメインへスクリプトを読みに行けない
- 盗んだデータを外部へ送信できない(
connect-src)ため、成立する攻撃が大きく減る。
一次対策であるXSS 対策(出力のエスケープ)を
置き換えるものではない点に注意する。
XSS の発生する箇所を削減・根絶することができる。
- 実行を許可するスクリプトの正しいドメインをブラウザに向けて指定する。
- 究極的な防衛策として、スクリプトの実行を全面的に拒否することも可能。
取得するコンテンツのドメインを制限することに加え、
サーバは通信に使うプロトコルを指定することも可能。
- すべてのコンテンツを HTTPS で取得されるように指定。
- Cookie に secure フラグを付与するように指定。
- Strict-Transport-Security HTTP ヘッダ
(セキュリティ強化のHTTPヘッダを参照)
移行メモ(リンク切れ): 元ページの「Strict-Transport-Security HTTP ヘッダ」は
同一ページ内に存在しないアンカーを指していた。
当該ヘッダは親ページの
「セキュリティ強化のHTTPヘッダ」で扱われているため、
そちらへのリンクに置き換えた。
-
Content-Security-PolicyHTTP ヘッダ
CSP で優先される配信のしくみは HTTP ヘッダ -
<meta http-equiv="Content-Security-Policy" content="・・・">タグ
ページのマークアップに直接ポリシーを設定する場合に便利
補足(meta タグには制限がある):
metaでの指定は、
frame-ancestors・report-uri・sandboxが効かない。
クリックジャッキング対策(frame-ancestors)を入れる場合は
必ず HTTP ヘッダで指定する必要がある。
-
CSP 1.0 仕様
-
connect-src
保護対象リソースがスクリプトインターフェイス
(XMLHttpRequest オブジェクトのsend()メソッドなど)
を使用して読み込むことのできる URL を制限する。 -
font-src
保護対象リソースがフォントの読み込み元にできる場所を制限する。 -
img-src
保護対象リソースがイメージの読み込み元にできる場所を制限する。 -
media-src
保護対象リソースがメディアの読み込み元にできる場所を制限する。 -
object-src
保護対象リソースがプラグインの読み込み元にできる場所を制限する。 -
script-src- 保護対象リソースが実行できるスクリプトを制限
- インラインスクリプト、および eval に対する追加の制限をする。
-
style-src
保護対象リソースにユーザーが適用できるスタイルを制限する。 -
default-src
他の CSP フェッチディレクティブのフォールバックとなる。 -
frame-src
保護対象リソースが埋め込めるフレームの供給元を制限する(CSP2 では廃止)。 -
report-uri
ポリシー違反に関するレポートをユーザーエージェントが送信する URL を指定する。 -
sandbox
ユーザーエージェントが保護対象リソースに適用する HTML サンドボックスポリシーを指定する。
-
-
CSP2 の新しいディレクティブ
-
form-action
HTML フォーム要素のアクションとして使用できる URL を制限する。 -
frame-ancestors
UA が HTML 以外のリソースを埋め込めるようにするかどうかを示す。 -
plugin-types
埋め込み可能なリソースのタイプを限定する。 -
base-uri
ドキュメントのベース URL の指定に使用できる URL を制限する。 -
child-src
入れ子になったブラウジングコンテキストと Worker の実行コンテキストの作成を制御する。
-
移行メモ(脱字): 元ページの
- 「追加の制限する」→「追加の制限をする」
- 「フォールバックする」→「フォールバックとなる」
- 「CSP2 では廃止する。」→「CSP2 では廃止**)**。」(閉じ括弧の欠落)
を整えた。
補足(
frame-ancestorsの説明): 元ページの
「UA が HTML 以外のリソースを埋め込めるようにするかどうかを示す」は
説明として通りにくい。
frame-ancestorsは正しくは
「自分のページをframe/iframeに埋め込んでよい親サイト」を制限する
ディレクティブで、X-Frame-Optionsの後継にあたる
(クリックジャッキング対策)。
補足(現在の推奨は nonce / strict-dynamic): 本ページが挙げている
ドメインのホワイトリスト方式は、CDN 上の任意の JS を経由して
迂回できることが分かっており、現在は推奨されていない。
代わりに、
- リクエストごとに乱数を発行して
script-src 'nonce-xxxx'とする'strict-dynamic'で、許可したスクリプトが読み込む先も連鎖的に許可するという nonce ベースの CSP が推奨されている。
-
後方互換性を保って設計されている。
- CSP 未対応のブラウザでも CSP 実装済のサーバと通信できる。
- CSP 未対応のサーバでも CSP 実装済のブラウザと通信できる。
-
CSP 2 については後方互換性が無い
-
W3C 仕様の標準ヘッダー。
-
Firefox 23 以上、Chrome 25 以上、および Opera 19 以上でサポート。
-
ポリシーを強制せず、ポリシー違反が起きた時のレポーティングのみを行う。
-
違反レポートは JSON の文書で構成され、HTTP POST リクエストを介して指定された URI に送信される。
補足(導入は Report-Only から): 既存サイトにいきなり CSP を強制すると
正規のスクリプトまで止まって画面が壊れる。
まずContent-Security-Policy-Report-Onlyで運用してレポートを集め、
違反が出なくなってから本番のヘッダに切り替えるのが定石である。
以前の Firefox で、Content-Security-Policy は、X-Content-Security-Policy だった。
- これらの実装は廃止されている。
- 制限があり、一貫性がなく、非常に多くのバグが含まれるので使用してはいけない。
以前の WebKit 系で、Content-Security-Policy は、X-Webkit-CSP だった。
- これらの実装は廃止されている。
- 制限があり、一貫性がなく、非常に多くのバグが含まれるので使用してはいけない。
-
Content Security Policy (CSP) - Web セキュリティ | MDN
https://developer.mozilla.org/ja/docs/Web/Security/CSP -
Content Security Policy の導入 | Mozilla Developer Street (modest)
https://dev.mozilla.jp/2016/02/implementing-content-security-policy/ -
CSP に関するチートシート - OWASP
https://jpcertcc.github.io/OWASPdocuments/CheatSheets/ContentSecurityPolicy.html -
Cotents Security Policy(CSP)のお勉強 - Qiita
https://qiita.com/o_Ozzzzk/items/c505b7dd20707eb4ee08 -
コンテンツ セキュリティ ポリシー | Web | Google Developers
https://developers.google.com/web/fundamentals/security/csp/?hl=ja
-
Content Security Policy(CSP)をサイトに適用しました
(Analytics,Adsenseも動くよ) | Webセキュリティの小部屋
https://www.websec-room.com/2017/05/05/2822 -
EGセキュアソリューションズオフィシャルブログ
弊社のホームページにContent Security Policy(CSP)を導入しました
http://blog.eg-secure.co.jp/2013/12/Content-Security-Policy-CSP.html
Tags: IT国際標準, 通信技術, IIS, .NET開発, .NET Core, ASP.NET, ASP.NET MVC
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。