in_array
in_array函数的功能用于检查数组是否存在某个值或者是不是数组。定义:布尔型函数,参数为($needle,$haystack,[$strict = FALSE]),在$haystack中搜索$needle,如果第三个参数$strict的值为TRUE(没有默认为FALSE),则该函数会进行强检查(相等于===),检查$needle的类型是否和$haystack中的相同。如果找到$haystack,则返回TRUE,否则返回FALSE。
in_array缺陷
根据上面所描述的,当该函数没有设置第三个参数的时候,只会进行弱类型比较(相当于==),也就是不会检查数据类型,例如
根据上面白名单规定,只能上传1~24的文件名,因为没有第三个参数,进行弱比较,所以我们上传3shell.php的时候,只要第一个匹配就可以了,从而绕过了白名单,达到了任意文件上传的目的。类似的还有:
1 |
|
这里我们有没有设置第三个参数,进行弱类型比较,同样绕过了白名单,这里需要注意的是in_array的返回类型,匹配了返回什么,还有注意前面的!,在preg_match等匹配的时候有常出现,要知道它的作用。