基本的なSQLインジェクションとその対策の紹介

SQLインジェクションとは

例えば

SELECT * FROM user_info WHERE name = '$username' AND password = '$userpass';

のようなコードが使われていたとき

$username : user1
$userpass : ' OR 'A' = 'A

と入力することで意図していなかった SQL を発行してしまう脆弱性のことである。 この場合だと「’A’ = ‘A’」という常に成り立つ式が入ることで不正なログインが可能になってしまう。

SQLインジェクションの対策

上のコードから

$sql = "SELECT * FROM user_info WHERE name=? AND password=?";
$stmt->execute(array($username,$password));

のように変更を加えることで、もしSQLとして解釈できる文字列が入力されてもその内容は「値」として解釈されるため、それがSQLとして実行されることは防げる。