php mysql 防 sql注入_php防sql注入函数mysql_real_escape_string解析

在php与mysql的编程中,一般都要接受用户输入的数据,此时必须严格过滤用户的数据,以确保网站的安全。

PHP中可以使用 mysql_real_escape_string 函数来过滤非法字符。

本函数将 string 中的特殊字符转义,并考虑到连接的当前字符集,因此可以安全用于mysql_query。

mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。

下列字符受影响:

\x00

\n

\r

\

'

"

\x1a

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

使用下在贩函数,即可有效过滤。

代码:用到了php函数--stripslashes

function safe($s){ //安全过滤函数

if(get_magic_quotes_gpc()){ $s=stripslashes($s); }

$s=mysql_real_escape_string($s);

return $s;

}

//edit by www.jbxue.com

?>

或在conn公共连接文件里加入,这样就无需修改代码了:

if(get_magic_quotes_gpc()) { $_REQUEST = array_map( 'stripslashes', $_REQUEST); }

$_REQUEST = array_map( 'mysql_real_escape_string', $_REQUEST);

//edit by www.jbxue.com

?>

附,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进行字符转义。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值