SQLインジェクション
対策として、SQL文中で意味を持つ特殊文字のエスケープ、バインド機構の利用がある
SQL文中で意味を持つ特殊文字をエスケープ
"'"は文字列の終端、"/"はエスケープ文字を意味する
認証に使われるSQL文
($uidと$pwdはユーザのフォームの入力値)
SELECT * FROM user WHERE user_id='$uid' AND password='$pwd'
入力
code:sql
$uid tarou
$pwd ' OR 'A'='A
これを実行した場合、user_idとpasswordが一致していなくても認証が通ってしまう
しかし特殊文字をきちんとエスケープしていればSQL文は実行されない
バインド機構
ユーザーからの値を割り振る前に、そのままデータベースを処理するところに送られてSQL文の構造を確定する仕組みのこと
SELECT * FROM user WHERE user_id=? AND password=?
"?"をプレースホルダー(ユーザーの値が入力されるまでの一時的な値)
上のように記述することで、この後ユーザーからどんな値が入力されても上記の公文の中でSQLが実行されるようになり、SQLインジェクションを防げる