晚上基佬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"
但是后面又不让出现这个值,想了很久
然后就想这个两个函数肯定有一个存在绕过的,最后还是手册好用啊
mixed array_search ( mixed $needle , array $haystack [, bool $strict = false ] )
最后还有一个参数$strict
就是定义是否严格检测
$strict
如果可选的第三个参数 strict
为 TRUE
,则 array_search()
将在 haystack
中检查完全相同的元素。 这意味着同样严格比较 haystack
里 needle
的 类型,并且对象需是同一个实例。
默认为不严格
那就和==
和===
的弱类型问题一样
测试代码
<?php
$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
很绝望