这个字符串替换是否足以抵御SQL注入攻击?

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.

  • 如果他们自己编写而不是使用标准函数,我就不相信其余的代码库. (5认同)

bob*_*nce 6

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注入存在,但它没有真正理解实际问题.