关于同时设置 VAR_FILTERS 和 DEFAULT_FILTER 造成数据二次过滤的BUG

浏览:3480 发布日期:2013/04/26
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);
}
即可过滤。
评论(
后面还有条评论,点击查看>>