3.1.2 - 严重 - 未处理
当配置文件同时定义了这两项配置常量时,例如:'VAR_FILTERS' => 'htmlspecialchars', // 全局系统变量的默认过滤方法
'DEFAULT_FILTER' => 'htmlspecialchars', // 默认参数过滤方法此时获取来的$_POST是进行过一次 C('VAR_FILTERS') 过滤的,与此同时,获取的$this->_post('xxx')是对$_POST数据进行C('DEFAULT_FILTER')过滤,导致数据二次过滤问题。即使用$this->_post('xxx', false)也是获取到已经进行C('VAR_FILTERS')过滤的内容。还有一点,在App.class.php中参数过滤的方法是
if(C('VAR_FILTERS')) {
$filters = explode(',',C('VAR_FILTERS'));
foreach($filters as $filter){
// 全局参数过滤
array_walk_recursive($_POST,$filter);
array_walk_recursive($_GET,$filter);
}
}此时配置信息'VAR_FILTERS' => 'htmlspecialchars', // 全局系统变量的默认过滤方法会发现参数死活不过滤修改配置信心为
'VAR_FILTERS' => 'h', // 全局系统变量的默认过滤方法同时新增function h 为function h(&$str){
$str = htmlspecialchars($str, ENT_QUOTES);
}即可过滤。 