PHP SQL注入漏洞防范

在PHP中采用魔术引号进行过滤,但是PHP5.4之后被取消了,同时在遇到int型注入也不会那么有效,所以用的最多的还是过滤函数和类(例如discuz,dedecms,phpcms),如果单纯的过滤函数写的不严谨,就会出现绕过的情况,最好的解决方法还是预编译的方式。

GPC/runtime魔术引号

数据污染有两种方式,一种是应用被动接受参数,类似于GET,POST等,还有一种是主动获取参数,类似于读取远程页面或文件等,GPC负责对GET,POST,COOKIE的值进行过滤,runtime对于从数据库或者文件中获取的数据进行过滤

这两个选项通常只能防护住部分SQL注入漏洞被利用,因为它们只对单引号,双引号,反斜杠与空字符进行过滤,在int型的注入上市没有多大作用的

过滤函数和类

  • addslashes

过滤的值范围和GPC是一样的,即单引号 双引号 反斜杠 空字符,它只是一个简单的检查参数的函数,大多数程序使用它是在程序的入口,进行判断如果没有开启GPC,则使用它对$_POST/$_GET等变量进行过滤,不过它的参数值必须是string类型。

$str=”phpsafe'”;

echo addslashes($str);

结果:

phpsafe\’
  • mysql_real_escape_string:

mysql_escapde_string和mysql_real_escape_string函数都是对字符串进行过滤,[\x00][\n][\r][\][‘][“][\x1a]等字符会受到影响。

两个函数唯一不一样的地方在于mysql_real_escape_string接受的是一个连接句柄并根据当前字符集转义字符串,所以推荐使用mysql_real_escape_string

  • intval字符转换

上面的过滤方式在遇到int类型注入的时候效果并不好,可以通过报错或者盲注等方式来绕过,intval方式可以将变量转化成int类型,利用参数白名单的方式来防止漏洞,对应的还有其他的方式例如floatval等等

$id = intval(“1 union select”); 

echo $id;

结果:1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值