我知道,这是经常讨论的问题,但我最近发现了这个漏洞,我正在测试我是否能抵抗这种注入,但是我无法模拟这种行为。可能,我不明白他们正在使用的查询。
我感兴趣的部分:
第一个漏洞影响不拒绝无效多字节字符的 mysql_real_escape_string() 函数系列。例如,在 UTF-8 中,“0xC8 'attackersql”或“0xC8\'attackersql”字符串被转换为“one_character 'attackersql”(忽略空格)。所以,查询:
SELECT ... WHERE v = 'mysql_real_escape_string("0xC8 'attackersql") '
变得 :
SELECT ... WHERE v = '0xC8''attackersql'
SELECT ... WHERE v = 'one_character 'attackersql'
因此,攻击者可以注入attackersql 命令。
这个问题听起来很蹩脚,但我怎样才能使这种注入工作?
注意(已编辑):我使用的是 PHP 5.2.6、MySQL 5.0.51a(更正),并且在 DB 连接上设置了字符集 'utf8'。