このクエリがID116の行を返すのはなぜですか。
SELECT *
FROM blahTable
WHERE id = '116\' OR \'1\'=\'1'
テーブルのIDは116ですが、そのインジェクションコードが追加された後、確かに0行を返す必要がありますか?
このクエリがID116の行を返すのはなぜですか。
SELECT *
FROM blahTable
WHERE id = '116\' OR \'1\'=\'1'
テーブルのIDは116ですが、そのインジェクションコードが追加された後、確かに0行を返す必要がありますか?
したがって、あなたが求めているのは、 id を照会するクエリを実行しているときに、id 116 の行が返される理由です'116\' OR \'1\'=\'1'
。
理由は型変換です。文字列を文字列として渡しているが整数と比較しているため、文字列は整数と 116 に変換されます。詳細はこちら: http://dev.mysql.com/doc/refman/5.0/en/type-conversion.html
116foofoofoo のような文字列は、比較のために 116 に変換されます。
mysql_real_escape_string を適用する代わりに、文字列ではなく数値用のメソッドを使用する必要があります。
CAST('116\' OR \'1\'=\'1' AS SIGNED)
orUNSIGNED
は 116 を返すためです。