2016-10-09
XSSを防ぐ新しいXSS-Protectionヘッダ
Googleの調査によると、CSPによるXSSの防止は現実的にデプロイの欠陥によりXSSの防止効果がないことを示しています。調査は「CSP Is Dead, Long Live CSP!」としてACMのカンファレンスで発表され、ペーパーも閲覧することができます。
9月に行われたW3C TPAC 2016のWebAppSecのミーティングで議論され、GoogleのMike West氏より新しくXSS Protectionという使用が提案されている。仕様も、氏のリポジトリから確認することができる。
https://mikewest.github.io/artur-yes/
このXSS Protectionは、新しくXSS-Protectionヘッダを定義し、CSPの一部の機能を引き取りX-XSS-Protectionでサポートされているような機能を有します。目的は簡潔でわかりやすく、CSPと同等のXSS軽減機能を提供することです
XSS-Protectionヘッダ
XSS-Protectionヘッダは、json形式のヘッダ値を持ちます。
例
下記の例では、XSS-Protectionヘッダでノンス値を指定します。その場合、そのノンス値が指定されたスクリプトタグのみが実行されます。
XSS-Protection: { "nonce": "abcdefg" }
<!-- このスクリプトは実行される --> <script src="script.js" nonce="abcdefg"></script> <!-- このスクリプトは実行されません --> <script src="script.js"></script>
指定できる項目
hash
実行を許可するスクリプトのハッシュ値を指定する
XSS-Protection: { "hash": [ "sha256-abcd...", "sha256-zyx..." ] } <script src="script.js" integrity="sha256-abcd..."></script> <script> // Content which hashes to abcd... goes here. </script>
nonce
実行を許可するScriptに指定されるノンス属性の値を指定
XSS-Protection: { "nonce": "abcdefg" } <script src="script.js" nonce="abcdefg"></script>
reflection
反射型XSSに対するポリシーに対して、ignore, filter, blockを指定する。ignoreの場合はユーザエージェントの保護機能を無効にする、filterはユーザエージェントのXSS検知機能で、検知された場合はそのスクリプトの実行をブロックする。blockは、ユーザエージェントのXSS検知機能で検出された場合にそのページのロード自体をブロックする。
XSS-Protection: { "reflection": "block" }
report
Reporting APIに則ってレポートグループを指定する。
XSS-Protection: { "nonce": "abcdefg", "report": "group1" } Report-To: { "url": "https://example.com/report", "group": "group1", "max-age": 10886400 }
- 7 http://b.hatena.ne.jp/
- 6 https://www.google.co.jp/
- 4 https://t.co/4EM6Za0N9u
- 2 http://htn.to/8NxckB
- 2 http://www.google.com.br/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CDMQFjAD&url=http://goo.gl/hWfnu9&ei=jWn5V7XoDtvoMe95&usg=AFQjCNEGdMW3ZXm2hjxFZEVY8C6MpHhMRA
- 2 http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCwQFjAG&url=http://goo.gl/pPh4V7&ei=lmn5V6SEB9fd8wX3kQE&usg=AFQjCNH25NgTLcaow_MkiKE9DXv2wDBOgA
- 2 https://t.co/71e3zcWUvJ
- 1 http://b.hatena.ne.jp/entrylist
- 1 http://b.hatena.ne.jp/entrylist/it/セキュリティ
- 1 http://b.hatena.ne.jp/sh19910711/favorite