渗透培训笔记:switch、数组比较缺陷

admin 2024年1月20日09:27:00评论10 views字数 1400阅读4分40秒阅读模式

switch比较缺陷

当在switch中使用case判断数字时,switch会将其中的参数转换成int类型进行计算,如以下代码所示。

<?php$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!"}
最终执行的结果为:say two hacker!
在进入switch逻辑前一定要判断数据的合法性,对不合法的数据要进行及时阻断,阻止恶意攻击者越过逻辑,出现逻辑错误。
<?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默认为falsemixed array_search(mixed $needle, array $haystack[, bool $strict = false ])  //strict默认为false

下面是in_array()或array_search()函数在没有设置$strict参数时的执行结果。

<?php$array = [0,1,2,'3'];var_dump =(in_array('abc', $array));  //truevar_dump =(array_search('abc', $array));  //0:下标var_dump =(in_array('1bc', $array));  //truevar_dump =(array_search('1bc', $array));  //1:小标

建议在使用时将$strict的值设置为true,这样in_array()或array_search()就会严格地比较$needle的类型与$haystack中的类型是否相同,以避免一些安全问题。下面是修复后的代码。

<?php$array = [0,1,2,'3'];var_dump =(in_array('abc', $array, true));  //falsevar_dump =(array_search('abc', $array, true));  //falsevar_dump =(in_array('1bc', $array, true));  //falsevar_dump =(array_search('1bc', $array, true));  //false

渗透培训笔记:switch、数组比较缺陷

原文始发于微信公众号(船山信安):渗透培训笔记:switch、数组比较缺陷

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月20日09:27:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   渗透培训笔记:switch、数组比较缺陷http://cn-sec.com/archives/2412942.html

发表评论

匿名网友 填写信息