クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

XSSとエスケープの基本

このレッスンのあとで: XSS が起きる仕組みを説明し、エスケープで直すことができる。

45分のレッスンコマンドなしDVWA のラボ:Damn Vulnerable Web Application で SQL インジェクションと XSS を練習する

書き込みが他人の画面で動く

クロスサイトスクリプティング(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の特別な記号を、見た目は同じ別の書き方にかえることです。ブラウザは、それを指示ではなく、文字として表示します。

& は &amp;、< は &lt;、> は &gt; に、書きかえます。引用符も同じです。

例: 書きかえの対応表

もとの記号書きかえ後読み方
&&amp;アンパサンド
<&lt;小なり(less than)
>&gt;大なり(greater than)
"&quot;二重引用符

学生が入力するセルは、このプレビューでは空白です。

よくある間違い

注意

「&」を最後に書きかえる人がいます。すると、先に作った「&lt;」の & が、もう一度「&amp;lt;」にかわります。書きかえは、必ず「&」から始めます。

さらに挑戦: 出力でも守る

入力を受けるときではなく、ページに出すときにエスケープするのが基本です。同じ文字でも、HTMLの中と、URLの中とでは、必要な書きかえが違います。

ラボのページで、エスケープなしと、ありの見え方を、1つずつ書き出してください。

このラボとソースについて: DVWA のラボ:Damn Vulnerable Web Application で SQL インジェクションと XSS を練習する

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。