ホーム >> 副業PHP >> MySQLのwhere文の動作について

副業PHP

  メイン  |  簡易ヘッドライン  

link PHPプロ!Q&A掲示板 PHPプロ!Q&A掲示板 (2009-1-8 3:02:22)

feed 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