变量覆盖

变量覆盖

十一月 23, 2021

在php中不正确的使用extract()、parse_str()以及import_request_variables()

函数会导致用户输入的变量值覆盖程序中原有的变量。例如更改黑名单

extract()函数

该函数是接受一个数组并把该数组解析成变量,键名为变量名,键值为变量值,

此函数可以接受3个值,第二个值该函数的配置,第三个值是在开启不覆盖原变量的情况下将变量的值附给第三个值

pars_str()函数

该函数是把字符串解析成变量例如“a=1”会被解析成$a=1,如果变量a之前存在,就会被覆盖,还可以加第二值为数组,这样解析出的变量就会存在数组中。

import_request_variables()

该函数会接收POST,COOKIE,GET的值并把他们转化从变量并会覆盖原有的变量可以用GPC代替

$$变量覆盖

1
2
3
4
5
6
7
8
9
10
<?php
$a=1;
foreach(array('_COOKIE', '_POST', '_GET') as $_request){
foreach($$_request as $_key => $_value){
echo $_key.'<br />';
$$_key = addslashes($_value);
}
}
echo $a;
?>

在输入?a=1的时候$key=a

所以$$_key就是$a就成了给a赋值的语句