書き込みが他人の画面で動く
クロスサイトスクリプティング(XSS)とは、ウェブページに入りこんだ他人のプログラムが、閲覧した人のブラウザで動いてしまう弱点です。掲示板の書き込みや、検索ページで起こります。
防ぐ方法は、エスケープという書きかえです。ラボでは、自分専用のコピーだけを使います。
このレッスンのゴール
メモ
XSS が起きる仕組みを説明し、エスケープで直すことができる。
キーワード
| ことば | いみ |
|---|---|
| HTML | ウェブページの形を書く言語 |
| XSS | 他人のページに、プログラムを入りこませる攻撃 |
| エスケープ | 特別な記号を、ただの文字に書きかえること |
| サニタイズ | 危険な入力を、安全な形にととのえること |
| セッション | ログインしている間の、利用者との結びつき |
学生が入力するセルは、このプレビューでは空白です。
守るべき約束はひとつ
注意
試すのは、ラボの自分専用のコピーの中だけです。実在のサイトの入力欄に、記号やプログラムを入れてはいけません。上のバーの Start the lab を押してください。
入力がHTMLとして読まれる
ブラウザは、HTMLの中の <b> のような記号を、指示として読みます。<b>こんにちは</b> は、太い文字で表示されます。
もし、利用者が書いた文字をそのままページに入れると、書き込みの記号も、指示として読まれてしまいます。
例: 入力とブラウザの見え方
| 書き込み | そのまま入れた場合 | エスケープした場合 |
|---|---|---|
| こんにちは | こんにちは | こんにちは |
| <b>やあ</b> | 太い文字で「やあ」 | <b>やあ</b> という文字が見える |
| 5 < 6 | 記号が指示と思われ、くずれることがある | 5 < 6 と見える |
学生が入力するセルは、このプレビューでは空白です。
ラボで、無害なタグを見る
ラボの Open を押して、DVWA を開きます。ラボの説明に書かれたログイン情報で入り、XSS の練習ページを選びます。
名前の欄に、まず Aki と書きます。次に <b>Aki</b> と書いて、見え方を比べてください。太い文字になれば、入力がHTMLとして読まれています。
なぜ「ただの表示」で済まないのか
書き込みが指示として読まれるなら、ページの中に、プログラムを動かす指示も入れられます。それが読まれると、見た人のブラウザで動きます。
そのプログラムは、見た人としてふるまえます。ログイン中のセッションを、盗む手口につながります。
エスケープで記号をただの文字にする
エスケープは、HTMLの特別な記号を、見た目は同じ別の書き方にかえることです。ブラウザは、それを指示ではなく、文字として表示します。
& は &、< は <、> は > に、書きかえます。引用符も同じです。
例: 書きかえの対応表
| もとの記号 | 書きかえ後 | 読み方 |
|---|---|---|
| & | & | アンパサンド |
| < | < | 小なり(less than) |
| > | > | 大なり(greater than) |
| " | " | 二重引用符 |
学生が入力するセルは、このプレビューでは空白です。
よくある間違い
注意
「&」を最後に書きかえる人がいます。すると、先に作った「<」の & が、もう一度「&lt;」にかわります。書きかえは、必ず「&」から始めます。
さらに挑戦: 出力でも守る
入力を受けるときではなく、ページに出すときにエスケープするのが基本です。同じ文字でも、HTMLの中と、URLの中とでは、必要な書きかえが違います。
ラボのページで、エスケープなしと、ありの見え方を、1つずつ書き出してください。