逻辑处理漏洞

1. in_array()函数

1.1 in_array函数用来判断一个值是否存在一个数组中,代码格式如下:

in_array(search,array,type)

search必需。规定要在数组搜索的值。
array必需。规定要搜索的数组。
type可选。如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。

1.2 测试代码如下

<?php
$family = array("xy", "wjw");

if (in_array($_GET['id'], $family))
  {
  echo "匹配已找到";
  }
else
  {
  echo "匹配未找到";
  }
?>

如果请求/test.php?id=xy则结果如下
在这里插入图片描述
将id改为1,结果则是匹配未找到,将上面的代码改一下进行此函数的漏洞测试

<?php
$family = array(1,2,3,4);

if (in_array($_GET['id'], $family))
  {
  echo "匹配已找到";
  }
else
  {
  echo "匹配未找到";
  }
?>

如果我们请求/test.php?id=1’ union
select…最终输出竟然也是“匹配已找到”,因此可以看到,虽然我们输入的不是数组里面的值,但是还是可以绕过这个检测并且注入成功,因为in_array函数存在一个问题,就是比较之前会自动做类型转换,而这种漏洞的形成是因为我们没有设置第三个参数,用于严格的执行漏洞检查。

2. is_numeric()函数

2.1 is_numeric函数用来判断一个变量是否为数字,具体代码如下

is_numeric ( mixed $var )

<?php
echo is_numeric(1234);       # 1
echo is_numeric('1234');    # 1
echo is_numeric(0x1234);    # 1
?>

可以发现当传入的参数为hex的时候则通过并返回ture,而mysql是可以直接使用hex编码代替字符串明文的,所以这块虽然不能直接注入SQL语句,但是存在二次注入的隐患,将‘or
1=1’hex编码之后为‘0x276f7220313d3127’,就可能导致注入漏洞

3. 双等于和三等于

3.1 PHP中的双等于(恒等于)用来判断两个量的值是否相等,而三等于(全等于)在双等于的基础上,要求其类型也必须相同,才会返回ture,而双等于在比较之前需要将两个变量进行类型转换,所以双等于容易存在安全风险

3.2 下面用示例代码测试一下

<?php
echo($_GET['var']==99);
?>

当我们请求为’/test.php?var=1’的时候,页面无输出,说明两个值不相等,当我们请求为’/test.php?var=99’的时候,页面输出1,说明此时两个量值相等,当我们请求为’/test,php?var=99qwqacwef’的时候,此时页面也输出的是1,也就是在此处判断之前完成了变量类型转换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值