-3

このクエリがID116の行を返すのはなぜですか。

SELECT * 
FROM blahTable
WHERE id =  '116\' OR \'1\'=\'1'

テーブルのIDは116ですが、そのインジェクションコードが追加された後、確かに0行を返す必要がありますか?

4

2 に答える 2

3

したがって、あなたが求めているのは、 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 を適用する代わりに、文字列ではなく数値用のメソッドを使用する必要があります。

于 2012-09-03T11:05:20.790 に答える
1

CAST('116\' OR \'1\'=\'1' AS SIGNED)orUNSIGNEDは 116 を返すためです。

于 2012-09-03T11:05:52.123 に答える