switch比较缺陷
当在switch中使用case判断数字时,switch会将其中的参数转换成int类型进行计算,如以下代码所示。
$num = "2hacker";
switch($num){
case 0:
echo "say none hacker!";
break;
case 1:
echo "say one hacker!";
break;
case 2:
echo "say two hacker!";
break;
default:
echo "I don't know!"
}
<?php
$num = "2hacker";
if(!is_numeric($num)){
die("错误的数据类型,禁止访问!");
}
switch($num){
case 0:
echo "say none hacker!";
break;
case 1:
echo "say one hacker!";
break;
case 2:
echo "say two hacker!";
break;
default:
echo "I don't know!"
}
数组比较缺陷
当使用in_array()或array_search()函数时,如果$strict参数没有设置为true,则in_array()或array_search()将使用松散比较来判断$needle是否在$haystack中。
bool in_array(mixed $needle, array $haystack[, bool $strict = false ]) //strict默认为false
mixed array_search(mixed $needle, array $haystack[, bool $strict = false ]) //strict默认为false
下面是in_array()或array_search()函数在没有设置$strict参数时的执行结果。
$array = [0,1,2,'3'];
var_dump =(in_array('abc', $array)); //true
var_dump =(array_search('abc', $array)); //0:下标
var_dump =(in_array('1bc', $array)); //true
var_dump =(array_search('1bc', $array)); //1:小标
建议在使用时将$strict的值设置为true,这样in_array()或array_search()就会严格地比较$needle的类型与$haystack中的类型是否相同,以避免一些安全问题。下面是修复后的代码。
$array = [0,1,2,'3'];
var_dump =(in_array('abc', $array, true)); //false
var_dump =(array_search('abc', $array, true)); //false
var_dump =(in_array('1bc', $array, true)); //false
var_dump =(array_search('1bc', $array, true)); //false
原文始发于微信公众号(船山信安):渗透培训笔记:switch、数组比较缺陷
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论