为什么此查询返回 id 为 116 的行:
SELECT *
FROM blahTable
WHERE id = '116\' OR \'1\'=\'1'
表中的 id 是 116 但在添加注入代码后它肯定应该返回 0 行吗?
为什么此查询返回 id 为 116 的行:
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。