本文主要介绍的是使用 addslashes,mysql_escape_string 和 mysql_real_escape_string 这三个函数对用户提交的表单数据进行转义处理的用法和区别。
首先需要明确的是addslashes,mysql_escape_string和mysql_real_escape_string这三个函数都是对即将要插入到数据库中的数据进行过滤从而保证插入到数据库中的数据的安全,防止数据库遭到攻击。那么这三个函数有些什么区别呢?
addslashes() 函数在指定的预定义字符前添加反斜杠。这些预定义字符是:
单引号 (')
双引号 (")
反斜杠 (\)
NULL
mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符,必须在(PHP 4 >= 4.3.0, PHP 5)的情况下才能使用。
下列字符受影响:
\x00
\n
\r
\
'
"
\x1a
如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。
本函数将 string 中的特殊字符转义,并考虑到连接的当前字符集,因此可以安全用于 mysql_query()。
mysql_escape_string() 与 mysql_real_escape_string() 的区别就是前者不考虑连接的当前字符集,而后者考虑。具体这里就不多说了,因为在 PHP 5.3 中已经弃用了这种方法,所以不推荐使用。
目前国内很多PHP coder仅仅依靠 addslashes 函数防止SQL语句注入,但这里考虑的问题是不全面的。因为对于想绕过 addslashes 函数的黑客而言,他们可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会被看作是单引号,所以addslashes无法成功拦截。
当然 addslashes 函数也不是毫无用处,它是用于单字节字符串的处理,对于多字节字符还是用 mysql_real_escape_string 函数来处理吧。