ユーザーからの入力を許しているページ(アンケート調査、懸賞応募、掲示板、メール送信、等々)では、悪意のある人物によって重要な情報を盗まれたり、最悪の場合、サイト自体を破壊されることがあります。このとき使われる手法がクロスサイトスクリプティング(XSS)である。
今回は、代表的なXSSの手法を紹介し、後半で対策を説明する。
懸賞応募ページなどユーザーからの情報入力が行われるページの流れは――最初のページで情報を入力し[確認]ボタンを押すと、次のページに入力内容の確認が行われる。ここで[送信]ボタンを押すと、情報がデータベースに登録される――というものが多い。
ここで問題となるのが、2番目の確認画面である。
まず、次のPHPプログラムを見てほしい。IDとニックネームを入力させ、“ようこそ”メッセージを表示する何の変哲もないプログラムである。
0001: <?php
0002: // ここからPHPプログラム =======================================================
0003: /** xss2.php
0004: * 脆弱な入力画面
0005: * @copyright (c)studio pahoo
0006: * @author パパぱふぅ
0007: * @version 1.0 2005/08/19
0008: *
0009: */
0010: //初回起動時
0011: if (isset($_GET["NAME"]) == FALSE) {
0012: $myself = basename($_SERVER["PHP_SELF"]);
0013: setcookie("DUMMYID", "ダミー・データです");
0014:
0015: // ここまでPHPプログラム =======================================================
0016: ?>
0017:
0018: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
0019: "http://www.w3.org/TR/html4/loose.dtd">
0020: <html lang="ja">
0021: <head>
0022: <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
0023: <title>脆弱な入力画面</title>
0024: </head>
0025: <body>
0026:
0027: <h3>■IDとニックネームを入力してください</h3>
0028: <form method="get" action="<?= $myself ?>">
0029: <table border="0" cellpadding="4">
0030: <tr>
0031: <td>ID</td>
0032: <td><input type="text" name="ID" size="80" /></td>
0033: </tr>
0034: <tr>
0035: <td>ニックネーム</td>
0036: <td><input type="text" name="NAME" size="80" /></td>
0037: </tr>
0038: <tr>
0039: <td colspan="2"><input type="submit" name="SUBMIT" value="送信" /></td>
0040: </tr>
0041: </table>
0042: </form>
0043: </body>
0044: </html>
0045:
0046: <?php
0047: // ここからPHPプログラム =======================================================
0048: } else {
0049: echo stripslashes($_GET["NAME"]) . " さん、いらっしゃい";
0050: }
0051: // ここまでPHPプログラム =======================================================
0052: ?>
0053:
ところが、ニックネームに http://www.pahoo.org/e-soul/webtech/php02/program/xss2.php?NAME=" + document.cookie); と入力してみてほしい。CookieをONにしている方は、いきなりCookieの内容が表示されたはずだ。
| 2005年08月24日更新 | ||
| <<前へ | <目次> | 次へ>> |
| 戻る | 【関連ページ】 | |