80 likes | 144 Views
平成23年度前期 情報科学 III (理系コア科目). PHP と SQL (MySQL) の連携 その 4. 担当 松永 裕介 月曜日 2限. http://www.c.csce.kyushu-u.ac.jp/~matsunaga/lecture/php/. 本資料の一部は、堀良彰准教授、天野浩文准教授等による 以前の講義資料をもとにしています。. 悪意のある攻撃. WEB ページを利用する人がすべて善意の人とは限らない。 特に、個人情報や金銭に関係する WEB ページ(上のプログラム)を設計する場合にはセキュリティを十分に考慮する必要がある。
E N D
平成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() を用いて特殊な文字をエスケープ(特殊文字の意味を失わせる)する。 • 場合場合によって対策を考える必要がある。 • ⇒たとえば、データベースの削除や更新の権限を設定しておくなど