-3

为什么此查询返回 id 为 116 的行:

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 回答