副業PHP
| メイン | 簡易ヘッドライン |
PHPプロ!Q&A掲示板
(2009-1-8 3:02:22)
MySQLのwhere文の動作について
(2008-11-19 3:22:16)
$sql="SELECT name FROM user WHERE id_='".mysql_escape_string($_GET['id'])."'";
$rs=mysql_query($sql,$connect);
while($rec=mysql_fetch_array($rs,MYSQL_ASSOC)){
echo $rec['name'];
}
このようなコードのプログラムを書いたのですが、?id_=150%27%20or%201%3d%271 としてアクセスしてもidが150のレコードのnameを読み込めます。
(150%27%20or%201%3d%271 は 150' or 1='1 をURLエンコードしたものです。)
これで発行されるSQL文は、
SELECT name FROM user WHERE id_='150\' or 1=\'1'
となっておりサニタイズはきちんと行われているので、idが 150\' or 1=\'1 に一致したもののみが該当すると思うのですが、なぜidが150のものに一致してしまうのでしょうか?
※ echo $rec['name'];部分は実際にはhtmlspecialcharを使っていますが分かりやすくするために省略しました。
execution time : 0.200 sec
