mysql_real_escape_string()是否完全防止SQL注入?

LM.*_*LM. 38 php mysql sql-injection

http://www.justinshattuck.com/2007/01/18/mysql-injection-cheat-sheet/?akst_action=share-this上,有一节声称可以绕过某些亚洲字符编码的mysql_real_escape_string

用BIG5或GBK绕过mysql_real_escape_string()

"注入字符串"
に关する追加情报:

上面的字符是中文Big5

这是真的吗?如果是这样,如果您无法访问预先准备好的声明,您将如何保护您的网站不受此影响?

Jos*_*vis 25

根据Stefan Esser的说法," 使用mysql_real_escape_string()时不安全SET NAMES".

他的解释来自他的博客:

SET NAMES通常用于将编码从默认编码切换到应用程序所需的编码.这是以mysql_real_escape_string不了解这一点的方式完成的.这意味着如果你切换到一些允许反斜杠作为第二个第3个第4 ...字节的多字节编码,你会遇到麻烦,因为mysql_real_escape_string没有正确转义.UTF-8很安全......

更改编码的安全方法是mysql_set_charset,但这仅适用于新的PHP版本

但他确实提到UTF-8是安全的.

  • "UTF-8是安全的..."导致另一个鲜为人知的怪物:输入编码安全性.例如,你检查输入(例如GET/POST/COOKIE/...)是否真的是UTF-8?自动输入编码检查和转换是否处于活动状态(服务器级别或应用级别)?等等. (3认同)

Bil*_*win 19

这是一个MySQL服务器错误,据报道已于2006年5月修复.

看到:

在MySQL 4.1.20,5.0.22,5.1.11中修复了该错误.

如果使用4.1.x,5.0.x或5.1.x,请确保至少已升级到次要修订号.

作为解决方法,您还可以启用SQL模式NO_BACKSLASH_ESCAPES,该模式禁用反斜杠作为引用转义字符.