XSS入門:反射型・蓄積型・DOM型と対策
XSS(クロスサイトスクリプティング)とは
この回でやること
XSS(クロスサイトスクリプティング)とは何かを、他人のブラウザで攻撃者のコードが動く欠陥だという一点で押さえ、3つの型の名前を先に置きます。
- 読む 約 7 分
- 最後にクイズ 1 問
このレッスンで学ぶこと
XSS(クロスサイトスクリプティング)は、利用者由来の文字列が画面でタグやスクリプトとして解釈される欠陥です。この回はその正体を一点に絞り、SQLインジェクションとの違いまで確かめます。
読み終えるころには、そのコードがどこで、だれの権限で動くのかを自分の言葉で言えるようになります。
一言でいうと
XSSは、攻撃者が書いたJavaScriptを、被害者のブラウザ上で、そのサイトのページの一部として動かす欠陥です。前回のとおり、動いたスクリプトはそのページの権限を持ちます。だから攻撃者は、被害者が tanaka としてログインしていれば tanaka として振る舞えます。
SQLインジェクション編と比べると輪郭がはっきりします。SQLiは、利用者の文字列がサーバー側でSQLの構文に混ざる欠陥でした。XSSは、利用者の文字列が被害者のブラウザ側でHTMLやJavaScriptに混ざる欠陥です。混ざる相手と、混ざる場所が違います。
なぜ起きるのか
サイトが、利用者由来の文字列を画面に出すときに起きます。文字が文字として表示されず、タグやスクリプトとして解釈されると、そこに書いたJSが動きます。
HTML
<div>「<b>test</b>」の検索結果</div>利用者が検索欄に <b>test</b> と打ち、それがそのまま上のように埋め込まれると、test が太字になります。太字になったということは、送った文字がHTMLとして解釈された証拠です。ここに <b> ではなくスクリプトを書ければ、それが動きます。
問題は、自分ではなく他人のブラウザで動かされることです。攻撃者は自分の画面ではなく、被害者の画面でそのサイトとして動かします。被害者のログイン状態、被害者に見えている情報が対象になります。練習用のショップでいえば、tanaka の画面で tanaka として、注文の一覧を読んだり、フォームの中身を送ったりできる、ということです。動くのは攻撃者のコードですが、権限はそのページを開いている利用者のものになります。
3つの型
XSSは、文字列がどこでHTMLになるかで3つに分かれます。名前は反射型、蓄積型、DOM型です。違いは次の3回で1つずつ扱います。ここでは「他人のブラウザで自分のコードを動かされる」という一点だけを持って進みます。