use*_*840 3 php mysql security code-injection
我正在尝试评估一种定制的CMS.devoloper用于抵御SQL攻击的保护是:
str_replace("'", "\'", $_POST[$variable]);
Run Code Online (Sandbox Code Playgroud)
这是否足够好,还是有办法利用它来注入SQL代码?
PS:我知道标准方法正在使用mysql_real_escape_string(),但我试图了解代码的一般质量.
小智 8
不会.抛出一些UTF8字符,这会使代码乱码或被转义.
使用mysqli/PDO或者必须使用mysql_real_escape_string.
str_replace("'", "\'", $_POST[$variable]);
Run Code Online (Sandbox Code Playgroud)
是的,这很脆弱.
平凡的是,反斜杠不会被转义,因此您可以使用反斜杠来突破字符串文字来掩盖引号:hello\' OR 1 --- > 'hello\\' OR 1 --'.
Null也没有逃脱,可能会导致问题.
此外,如果正在使用东亚字符集,则可以使用多字节序列来掩盖引用.(注意这不是UTF-8的情况,因为UTF-8不允许'作为尾随字节.)
此转义格式也仅适用于MySQL.如果使用任何其他数据库,或者在MySQL中使用符合ANSI标准的字符串文字选项,则它将无效,因为标准的转义是将引号加倍,而不是反斜杠.
代码没用.充其量它表明有人知道SQL注入存在,但它没有真正理解实际问题.