Php ajax inserch,php中in_array()和array_search()的弱类型问题

晚上基佬pcat突然问我一个题怎么做,其实我也很绝望啊。也是第一次见这个套路

丢出代码大家观赏

if(is_array(@$b["a"])){

echo "1";

echo "\n";

if(count($b["a"])!==2 OR !is_array($b["a"][0])) die("ha1");

$c = array_search("JILAO", $b["a"]);

$c===false?die("ha2"):NULL;

foreach($b["a"] as $key=>$val){

$val==="JILAO"?die("ha3"):NULL;

}

echo "Ture";

}

前面几个判断都很容易绕过,到了最后一步发现存在问题,因为上面array_search()要求必须要有"JILAO"

但是后面又不让出现这个值,想了很久

img-8cfc606cc290f811cb0eaeed4a5f1dc4.jpg

然后就想这个两个函数肯定有一个存在绕过的,最后还是手册好用啊

mixed array_search ( mixed $needle , array $haystack [, bool $strict = false ] )

最后还有一个参数$strict就是定义是否严格检测

$strict

如果可选的第三个参数 strict 为 TRUE,则 array_search() 将在 haystack 中检查完全相同的元素。 这意味着同样严格比较 haystack 里 needle 的 类型,并且对象需是同一个实例。

默认为不严格

那就和==和===的弱类型问题一样

测试代码

$array=array(0,1);

var_dump(array_search('JILAO', $array));

var_dump(array_search('1bert', $array));

?>

打印

int(0)

int(1)

好了找到问题所在了,

不严格模式下在匹配过程中'JILAO'变成了

而1bert变成了1

翻阅手册后发现in_array()也同样存在这个问题

又是百无聊赖的周末

又是啥也不会的pwnhub

很绝望

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值