飘易博客(作者:Flymorn)
订阅《飘易博客》RSS,第一时间查看最新文章!
飘易首页 | 留言本 | 关于我 | 订阅Feed

PHP防SQL注入函数:mysql_real_escape_string

Author:飘易 Source:飘易
Categories:PHP编程 PostTime:2013-1-22 17:25:03
正 文:
    我们在使用php+mysql时,一般情况下都要接受用户输入的数据,这就意味着很大的风险,因为用户可能输入正常数据,也可能输入恶意的代码。作为developer,必须严格过滤用户的数据,来保护我们的网站安全。

    PHP中可以使用 mysql_real_escape_string 函数来过滤非法字符。本函数将 string 中的特殊字符转义,并考虑到连接的当前字符集,因此可以安全用于 mysql_query()。
    mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。下列字符受影响:
\x00
\n
\r
\
'
"
\x1a

如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。

    飘易利用下面的这个函数,就可以有效过滤了。
function safe($s){ //安全过滤函数
if(get_magic_quotes_gpc()){ $s=stripslashes($s); }
$s=mysql_real_escape_string($s);
return $s;
}

    或者在conn公共连接文件里加入,这样就无需修改代码了:
if(get_magic_quotes_gpc()) { $_REQUEST = array_map( 'stripslashes', $_REQUEST); }
$_REQUEST = array_map( 'mysql_real_escape_string', $_REQUEST);

    mysql_real_escape_string语法
mysql_real_escape_string(string,connection)
参数 描述
string 必需。规定要转义的字符串。
connection 可选。规定 MySQL 连接。如果未规定,则使用上一个连接。

    其实,一般的还可以利用这个函数 addslashes 进行转义。作用同样为对GET、POST、COOKIE过来的字符串进行转义处理,通常与 magic_quotes_gpc 结合使用。

    下面讲述下addslashes  、magic_quotes_gpc、mysql_real_escape_string 三者之间的区别:

    1、addslashes  与 mysql_real_escape_string,同样的作用是经过转义后,可直接插入数据库, 国内很多PHP coder是使用addslashes函数防止SQL注入,但是建议大家使用后者转义数据。

    举例说明:addslashes的问题在于黑客可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会被看作是单引号,所以addslashes无法成功拦截。
    两者何时用:addslashes也不是毫无用处,它是用于单字节字符串的处理,多字节字符还是用mysql_real_escape_string更加安全。

    2、magic_quotes_gpc的说明,在首次客户端运行时,可用第一条的举例,对 magic_quotes_gpc 进行 $_['name'] 判断,可转义处理。

    3、 mysql_real_escape_string和 mysql_escape_string 这2个函数的区别:
    mysql_real_escape_string 必须在(PHP 5以上、PHP 4 >= 4.3.0)版本的情况下才能使用。否则只能用 mysql_escape_string 。
    两者的区别是:mysql_real_escape_string 考虑到连接的当前字符集,而 mysql_escape_string 不考虑。 

    4、实际开发中,正确的逻辑处理,如下:
    首先,检查 magic_quotes_gpc 是否配置为自动转义斜线,若为on,应该调用stripslashes去掉$_REQUEST、$_GET,$_POST、$_COOKIE的转义斜线;然后,查询/写入/更新数据至mysql时,再使用mysql_real_escape_string进行字符转义

[参考]:
1、讨论magic_quotes_gpc、mysql_real_escape_string、addslashes的区别及用法
http://blog.unvs.cn/archives/magic_quotes_gpc-mysql_real_escape_string-addslashes.html
作者:飘易
来源:飘易
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
上一篇:Linux利用Squid搭建HTTP代理ip平台
下一篇:使用PDO查询Mysql来避免SQL注入风险
0条评论 “PHP防SQL注入函数:mysql_real_escape_string”
No Comment .
发表评论
名称(*必填)
邮件(选填)
网站(选填)

记住我,下次回复时不用重新输入个人信息
© 2007-2010 飘易博客 Www.Piaoyi.Org 原创文章版权由飘易所有