addslashes() Versus mysql_real_escape_string()

关于 addslashes() 和 mysql_real_escape_string() 两个函数,已经有过很多争论了。

在 PHP 过滤 SQL 注入时,通常都会使用  addslashes() 函数,但这并不保险,尤其是数据库编码是 GBK 时,类似于 %5c(\) 和 %27(‘) 等字符时,不能得到预期的正确过滤。

我在使用  mysql_real_escape_string() ,数据库是 UTF-8 编码时,也是不能正常过滤,以 %5c 结尾的汉字,在做完转义后,效果仍然和 addslashes() 的结果一样。但同样的代码,拿到使用 GBK 编码编译的 MySQL 环境下就没问题。

我还没有搞明白到底问题出在哪里,最近会一直 focus 在这上面。

今天发现一个老外写的 Blog,分析得比较深入,尽管已经是 2 年前发表的了。

http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string

分析得比较透彻,有很多人写了回复,仔细看看每个人的反馈,也能受益匪浅。

Leave a Reply

Your email address will not be published.

*