关于同时设置 VAR_FILTERS 和 DEFAULT_FILTER 造成数据二次过滤的BUG
来源:互联网 发布:开封知言小学怎么样 编辑:程序博客网 时间:2024/05/17 23:30
关于同时设置 VAR_FILTERS 和 DEFAULT_FILTER 造成数据二次过滤的BUG
- '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);
- }
复制代码
即可过滤。===============================================
ThinkPHP函数详解:C方法
C方法是ThinkPHP用于设置、获取,以及保存配置参数的方法,使用频率较高。了解C方法需要首先了解下ThinkPHP的配置,因为C方法的所有操作都是围绕配置相关的。ThinkPHP的配置文件采用PHP数组格式定义。
由于采用了函数重载设计,所以用法较多,我们来一一说明下。
设置参数
C('DB_NAME','thinkphp');表示设置DB_NAME配置参数的值为thinkphp,由于配置参数不区分大小写,所以下面的写法也是一样:
C('db_name','thinkphp');但是建议保持统一大写的配置定义规范。
项目的所有参数在未生效之前都可以通过该方法动态改变配置,最后设置的值会覆盖前面设置或者惯例配置里面的定义,也可以使用参数配置方法添加新的配置。
支持二级配置参数的设置,例如:
C('USER.USER_ID',8);配置参数不建议超过二级。
如果要设置多个参数,可以使用批量设置,例如:
$config['user_id'] = 1;$config['user_type'] = 1;C($config);如果C方法的第一个参数传入数组,就表示批量赋值,上面的赋值相当于:
C('USER_ID',1);C('USER_TYPE',1);
获取参数
要获取设置的参数,可以用:
$userId = C('USER_ID');$userType = C('USER_TYPE');如果USER_ID参数尚未定义过,则返回NULL。
也可以支持获取二级配置参数,例如:
$userId = C('USER.USER_ID');如果传入的配置参数为空,表示获取全部的参数:
$config = C();
保存设置
3.1版本增加了一个永久保存设置参数的功能,仅针对批量赋值的情况,例如:
$config['user_id'] = 1;$config['user_type'] = 1;C($config,'name');在批量设置了config参数后,会连同当前所有的配置参数保存到缓存文件(或者其他配置的缓存方式)。
保存之后,如果要取回保存的参数,可以用
$config = C('','name');其中name就是前面保存参数时用的缓存的标识,必须一致才能正确取回保存的参数。取回的参数会和当前的配置参数合并,无需手动合并。
===============================================
PHP array_walk_recursive() 函数
PHP Array 函数
定义和用法
与 array_walk() 函数 类似,array_walk_recursive() 函数对数组中的每个元素应用回调函数。不一样的是,如果原数组中的元素也是数组,就会递归地调用回调函数,也就是说,会递归到更深层的数组中去。
典型情况下,function 接受两个参数。array 参数的值作为第一个,键名作为第二个。如果提供了可选参数 userdata ,将被作为第三个参数传递给回调函数。
如果回调函数需要直接作用于数组中的值,可以将回调函数的第一个参数指定为引用,这样对这些单元的任何改变也将会改变原始数组本身。
语法
array_walk_recursive(array,function,userdata)
- 关于同时设置 VAR_FILTERS 和 DEFAULT_FILTER 造成数据二次过滤的BUG
- TextBox的扩展,支持文件夹和各类文件的拖入,同时可设置过滤文件格式!
- TextBox的扩展,支持文件夹和各类文件的拖入,同时可设置过滤文件格式!
- 关于一个xml时间解析造成的bug
- Excel2010关于设置单元格颜色和背景色的bug
- 关于DO_POWER_INRUSH 和DO_POWER_INRUSH 同时设置问题
- 整型和指针长度不同造成的Bug
- 关于Bugzilla过滤(不显示CLOSED的bug)
- (原创)TCPIP的二次封装,可同时多客户端收发数据
- 关于GCC4.8.2编译器同时链接rdkafka的c库和c++库时出现的一个BUG
- 关于避免审查元素时,修改数据和提交数据,造成恶意审查修改的方法总结
- 关于JPanel设置背景图片的Bug说明
- 关于JPanel设置背景图片的Bug说明
- 关于TransparentImage设置透明颜色的bug
- validator 和 datepicker同时使用时的小Bug
- mysql中orderby和limit同时使用的bug
- mysql中orderby和limit同时使用的bug
- mysql中orderby和limit同时使用的bug
- 线程同步
- oracle 权限
- ping
- C++编程。。长见识篇
- 索引视图
- 关于同时设置 VAR_FILTERS 和 DEFAULT_FILTER 造成数据二次过滤的BUG
- 4.8 《硬啃设计模式》 第25章 假如一切可以重来 - 备忘录模式(Memento Pattern)
- CodePage
- upx壳的一些简单脱壳,望大牛勿喷。
- aspack的简单脱壳,望大牛勿喷。
- 北斗ncpack的简单脱壳。
- Java进行FTP操作
- uip代码之#define BUF ((struct uip_eth_hdr *)&uip_buf[0])
- 数据挖掘数据集资源