3.1.2 - 致命 - 未处理
/**
* 修复FORM POST情况下$this->_param无法获取URL参数问题
* File: ThinkPHP\Lib\Core\Action.class.php Line 243
* array_merge中$input一定要放最后,否则会导致后者覆盖$input参数
*/
$input = array_merge($_GET,$_GET[C('VAR_URL_PARAMS')],$input);
/*
分析:
从ThinkPHP\Lib\Core\Action.class.php _param的定义中可以看出,
case '_param'(Line 231)时,会根据$_SERVER['REQUEST_METHOD']进行switch判断,
因此得到的是FORM提交的POST方法,而后面的
$input = array_merge($input,$_GET[C('VAR_URL_PARAMS')]);(Line 243)
只是合并了$input及$_GET[C('VAR_URL_PARAMS')](URL参数),忽略了$_GET的其他参数,
这导致了其他$_GET参数无法获取,另外这里可能导致参数$input参数被篡改。
因此,需要使用:$input = array_merge($_GET,$_GET[C('VAR_URL_PARAMS')],$input);
将$_GET,$_GET[C('VAR_URL_PARAMS')],$input合并即可。
$_GET带有所有GET方法的参数,
$_GET[C('VAR_URL_PARAMS')]带有URL解析后的参数,
$input是当前方法的参数,当前方法可能是GET,POST,PUT。
这里array_merge的顺序是要求的,$input一定要放在最后,
覆盖前面可能被通过URL注入的同名变量,
否则$input的参数就可能被URL同名参数覆盖掉了!!
*/ 