SQLインジェクション対策

脆弱性のあるフォームのSQLインジェクションの対策を行う。
/var/www/html/にPHPファイルを作る。(この時 名前.phpとしないとphpファイルにならない。)

MySQLで、データベース、その中にusername、userpassのテーブルを作る。

今回は、username u1 userpass u1を作った。

作ったform.phpをいじって、SQLインジェクション対策を行う。


// ログインボタンが押された場合 if (isset($_POST["login"])) { $username = mysql_real_escape_string($_POST["username"]); $userpass = mysql_real_escape_string($_POST["password"]); #die($username) $result = mysql_query("SELECT count(*) as cnt FROM user_info WHERE name = '$username' AND password = '$userpass'", $link); $row = mysql_fetch_assoc($result); $count = $row['cnt'];

mysql_real_escape_string = 入力されたワードの特殊文字だけをただの文字に変化させる関数

こうすることで

username = u1

userpass = ‘ OR ‘A’ = ‘A

と入力した時

$result = mysql_query(“SELECT count(*) as cnt FROM user_info WHERE name = ‘$username’ AND password = ‘$userpass'”, $link);

において name = ‘u1’ password = ‘\’ OR \’A\’ = \’A’

と変わっている。


補足

・mysql_query()などと囲われた時、()の中身はmysqlに投げられている。(そもそも論かもしれないです汗)

・特殊関数の(魔法を使うという)特性を打ち消すために、エスケープ構文を用いる。