平成23年度前期 情報科学III (理系コア科目) PHP と SQL (MySQL) の連携 その4 担当 松永 裕介 月曜日 2限 http://www.c.csce.kyushu-u.ac.jp/~matsunaga/lecture/php/ 本資料の一部は、堀良彰准教授、天野浩文准教授等による 以前の講義資料をもとにしています。 悪意のある攻撃 • WEBページを利用する人がすべて善意の人 とは限らない。 • 特に、個人情報や金銭に関係するWEBペー ジ(上のプログラム)を設計する場合にはセキ ュリティを十分に考慮する必要がある。 • 詳細は、書籍やWEB上の情報で各自、確認 すること。また、永遠に安全といえる対策はあ りえないので常に対策を考えておく必要があ る。 GET を用いた入力フォーム • <form action=action.php method=get> <table> <tr> <td>アカウント</td> <td><input type=text name=name></td> </tr> <tr> <td>パスワード</td> <td><input type=password name=password></td> </tr> <tr> <td> <input type=submit value=ログイン> <input type=reset value=クリア> </td> </tr> </table> </form> GETを用いた入力フォーム • 情報科学IIIのWEBページの – テストページ のリンクをクリック 名前とパスワードを適当に入れて “ログイン”を クリック 切り替わったページのURLにはどんな文字列 が表れているか? MYSQL データベースを用いた ログイン認証 <?php $id = mysql_connect(….) $sql = sprintf(“SELECT * FROM mydb WHERE name=‘%s’ AND password = ‘%s’” , $_POST[‘username’], $_POST[‘password’]); $result = msql_query($id, $sql); if (mysql_numrows($result) > 0) { print “ログインに成功しました。”; } … ?> SQLインジェクション • SELECT * FROM mydb WHERE name=‘%s’ AND password =‘%s’ • name に x’ OR 1 = 1 --; を入れると – 以降 はコメントとみなされ、 WHERE 節の条件が 成り立ってしまう。 • ⇒認証のすり抜け • ⇒データベースに対する不正な操作(書き換 え、削除など) SQLインジェクションの対策 • ログイン名やパスワードなどの場合には、入 力可能な文字の種類を制限しておいて、’ や “ などが入力されたらエラーにするようにする 。 • PHP の関数 addslashes() を用いて特殊な 文字をエスケープ(特殊文字の意味を失わせ る)する。 • 場合場合によって対策を考える必要がある。 • ⇒たとえば、データベースの削除や更新の権 限を設定しておくなど
© Copyright 2024 ExpyDoc