修复POST情况下$this->_param无法获取URL参数问题

浏览:2136 发布日期:2013/06/19
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同名参数覆盖掉了!!
*/
评论(
后面还有条评论,点击查看>>