これまた非常によく聞く攻撃方法ですね。
Contents
クロスサイトスクリプティングとは?
動的なページの表示生成の際に悪意のあるスクリプトを埋め込む行為。
具体的にはここが例え話もあって一番わかりやすいですな。
あるいは下記のソースの/xssのページ。
https://github.com/umanari145/secure
要約としてはiframeのsrcやinputのタグの中に<script>〜</script>や画面遷移系のHTML(たとえばform)を入れ、クッキーを盗み出し、SESSION_IDなどを抜き出したり、情報を書き換えたりします。下記の本に例が詳しいです。
被害
- 本物サイト上にニセの情報がばらまかれる
- ブラウザが保存しているCookieを取得され、なりすましにつながったり、個人情報の流出につながる
- 任意のCookieをブラウザに保存させられる→セッションIDの固定化など
- 特に入力を内容を確認させる表示画面(会員登録、アンケート、検索結果の表示、エラー表示などに紛れ込みやすい
対策
- ウェブページに出力するすべての要素に対して、エスケープ処理を施す(いわゆるHTMLエスケープ)
- 属性値は基本的にダブルクオートでくくる
- URL出力の差異にはhttp://もしくはhttpsのもののみだけを対象とする(javascriptのものを防ぐ)
- <script>~</script>の内容を動的に生成しない
- 詳細なエラーメッセージを画面に表示しない
- スタイルシートを任意のサイトから取り込めるようにしない
- HTTPレスポンスヘッダのContent-Typeには文字コードを必ず指定する(指定しないと一部の文字コードがスクリプトになる)
その他
ちなみに現在のブラウザではXSSが自動的でエスケープされることがあり、「体系的に学ぶ〜」のサンプルなどは実行できないことが多いです。
その場合、MACであれば下記のような方法でXSSのフィルターを無効化しましょう。
1 |
open -na Google\ Chrome --args --disable-xss-auditor --user-data-dir="/tmp/chrome" |