PHP安全之道之switch比较缺陷
当在switch中使用case判断数字时,switch会将其中的参数转换为int类型进行计算。
$num = '2www.ziruchu.com';
switch ($num) {
case 0:
echo '你被转为了数字,我是0';
break;
case 1:
echo '你被转为了数字,我是1';
break;
case 2:
echo '你被转为了数字,我是2';
break;
default:
echo '你是谁?~~~';
}
上述代码结果输出了‘你被转为了数字,我是2’。
【解决之道】判断数据的合法性,对不合法的数据即使进行阻断。
$num = '2www.ziruchu.com';
if (!is_numeric($num)) {
die('类型错误,非法访问!');
}
switch ($num) {
case 0:
echo '你被转为了数字,我是0';
break;
case 1:
echo '你被转为了数字,我是1';
break;
case 2:
echo '你被转为了数字,我是2';
break;
default:
echo '你是谁?~~~';
}
2020-10-11
请登录后再评论