php sql防注入 addslashes()、mysql_real_escape_string()、mysql_escape_string()的区别

PHP自带对输入字符串处理的功能-Magic Quotes(php.ini magic_quotes_gpc),如果是自己的服务器可以自己开启(Magic Quotes在php5.4起已被废弃)。如果是租的服务器,并且没有开启,就只能通过php函数对输入的危险字符转义防止sql注入。

常用的函数有:

addslashes();
mysql_real_escape_string();
mysql_escape_string();

分别介绍下三个函数。

 

addslashes()函数是强行加 “\”,addslashes的问题在 于黑客 可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会 被看作是单引号,所以addslashes无法成功拦截。当然addslashes也不是毫无用处,它是用于单字节字符串的处理,多字节字符还是用mysql_real_escape_string吧。

 

mysql_real_escape_string() 会判断字符集,但是对PHP版本有要求,需要php版本4.3之后,当然使用此函数前提是创建了连接,第二个参数传入连接,可以省略,默认使用当前连接。

 

mysql_escape_string()不考虑连接的当前字符集。

发表评论