前回のハックでクロスサイトスクリプティング(XSS)について取り上げた。 webアプリケーションサイドでXSSが発生しないように対策するのは当然なのだが、最近のブラウザには大概XSS脆弱性があった場合に、 スクリプトの実行を防ぐ仕組み(XSSフィルタ)がある。
ChromeやSafariといったWebkitレンダリングエンジンを採用してるブラウザとマイクロソフト系のブラウザ(Internet Explorer Edge)ではその仕組みが異なる。 詳しい仕様は公開されていないようだが、IEでは送られるデータ上にスクリプトのパターンが含まれていると動作し、 webkit上ではDOM構造が破壊されてコードが新たに生成された時に動作する模様。
IEでは、入力フォームに
javascript:(何かしらの文字列)
と入力されると、サニタイジング&URLエンコードをしていてもXSSフィルタが作動した。 webkit系のブラウザでは動作しなかった。XSSフィルタが作動すると、スクリプトの実行を防ぐためか、 文字列が書き換えられた。
この状況においてXSSフィルタの動作を防ぐ方法は見つけられなかったが、XSSフィルタそのものをWeb側から無効化する方法があった。 WebサーバからのHTTPレスポンス内に
X-XSS-Protection: 0
と記述することで、XSSフィルタの動作を無効化できる。ただし万が一Webアプリケーション側にXSSの脆弱性があるとユーザが危険に晒される可能性がある。
【参考サイト】
https://subtech.g.hatena.ne.jp/mala/20110423/1303536971