+ -
当前位置:首页 → 问答吧 → 安全数据: GLOBALS数组相关认识

安全数据: GLOBALS数组相关认识

时间:2010-07-27

来源:互联网

此文与安全注入相关知识有所关连.
  在纯过程的代码结构中, 有些避免不了"随地大小便", 也无法用统一的数组来装载, 临时桥接还是会产生一些突然出现的变量, 一个功能块流程下来, 你会发临时变量越来越多, 有用变量及无用变量, 我们没有办法去区分. 根据php特性, 释放内容作用与c是完全不同, 那我们就没必要unset, 但也许会思考一下变量分类, 比如说: safe_var(安全变量)  get-var (GET变量) file_var (文件流变量). 也许我们能够用GLOBALS来智能分析及处理一下变量, 特别是file,get,post 这三块上. php常见的外部数据也就这三样.
下载 (23.74 KB)
8 小时前

  人工建立的变量通常在GLOBALS 数组的末端. 但前面标识不是很统一,
  1. <?php
  2. /* 处理安全变量 */
  3. $TSFSDFS = 1;
  4. $c = array(1,2,3,4);
  5. $f = fopen('http://www.baidu.com','rb');
  6. $at = $_GET['a'];

  7. // 解析变量
  8. $all_var= parse_var();

  9. print_r($all_var);

  10. function parse_var(){
  11.         $a = 0;
  12.         $list = array();
  13.         foreach ($GLOBALS as $key => $val){
  14.                 if($a === 1)
  15.                 $list[$key] = $val;        
  16.                 if($key === '_REQUEST')
  17.                         $a = 1;
  18.         }
  19.         return (array) $list;
  20. }
  21. ?>
复制代码
这一段能够简单地取出一个流程中所有的变量信息, 并且去掉了内置的一些数组, 即仅取出你所定义的变量信息, 其它的暂时去掉. 这时,我们可以循环变量了. 如下处理.
  1. // 循环变量
  2. foreach ($all_var as $key => $val){
  3.         if(strpos($key,'safe') !== false){
  4.                 $all_var[$key] = addslashes($val);
  5.         }
  6. }
复制代码
这时即能够将所有safe开头的变量自动转义, 你如果需要安全字符, 就将变量设置为safe开头即可, 系统自动会处理过滤等工作.

在于模板化, 也更加方便地传输了变量与html两者的结合, 在类中, 你仅需要调用这个数组, 即可以获得所有的变量信息, 以便在模板中加载. 类似smarty. 更有帮助的可以规范你的代码, 在印出此数组时, 你可以查看变量使用情况, 注销情况,及变更情况, 是否临时变量设置过多, 没有复用等等. 这些信息对系统开发很有帮助.
  
  以上代码在win下运行调试, 未知linux iis相关环境情况.
  完毕.

作者: 冯.于安   发布时间: 2010-07-27

ok,已经过目!严重不错。

作者: wanchun0222   发布时间: 2010-07-27