脆弱性のあるフォームの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に投げられている。(そもそも論かもしれないです汗)
・特殊関数の(魔法を使うという)特性を打ち消すために、エスケープ構文を用いる。