xml地图|网站地图|网站标签 [设为首页] [加入收藏]

1版代码执行漏洞,ThinkPHP应用模式扩展详解

来源:http://www.ccidsi.com 作者:呼叫中心培训课程 人气:194 发布时间:2019-07-10
摘要:方今360库带安插中播放的ThinkPHP扩充类库的纰漏已经查明原因:系合法扩张方式中的Lite精简格局中存在也许的漏洞(原先主题更新安全的时候并未更新情势扩张部分,现已更新)。 对于

方今360库带安插中播放的ThinkPHP扩充类库的纰漏已经查明原因:系合法扩张方式中的Lite精简格局中存在也许的漏洞(原先主题更新安全的时候 并未更新情势扩张部分,现已更新)。
对于利用正式形式可能其它方式的用户一纸空文此漏洞,敬请放心。3.2本子现已对扩张重新设计(原本的形式扩大、引擎扩大均不再支持),也不设有此难点。
请有使用ThinkPHP3.0~3.1版本的Lite形式的用户注意更新。
Lite格局扩充包下载地址:

ThinkPHP的运用形式使得开采职员对宗旨框架进行改建较以后尤其百发百中,何况能够让您的接纳适应更加多的情状和分裂的需求。各类应用格局都有友好的方式定义文件,相对于ThinkPHP3.1版本,ThinkPHP3.2版本对应用方式的增加特别显明和鲜明,在ThinkPHP3.1版本中定义了Cli、Lite、Thin、AMF、PHPRPC、REST情势,其定义方式和ThinkPHP3.2版本的格局千篇一律,如有须求能够参见修改,个中Cli情势被ThinkPHP框架内置,不用单独定义Cli格局就能够通常使用,如必要更加细化调节可以参见3.1版编纂的Cli运维方式扩充。ThinkPHP同样提供了方便人民群众的开支条件和行业内部景况的方式切换形式。让大家乘机ThinkPHP的运行流程深入分析其应用情势扩展之谜。

360库带布置:

一、应用方式的施用

图片 1
ThinkPHP 开启lite形式后,会加载ThinkPHP/Extend/Mode/Lite/Dispacher.class.php去相称U瑞虎L并散发用户伏乞, 而在该公文的65行使用perg_replace函数的 /e参数,
图片 2
第3个参数援引的时候使用了双引号,进而变成代码奉行。

在商讨利用形式扩展在此以前,看看哪些运用应用模式的呢。一般通过在进口文件定义常量应用程式_MODE为运用形式名称,不过在剖判ThinkPHP框架入口文件时,精晓到框架默许使用格局为普通形式(common),况且能够自行识别sae情况,当然前提是不曾定义APP_MODE常量时,当然ThinkPHP能够活动识别CLI和CGI形式,而且在CLI和CGI意况下运作ThinkPHP框架在暗中认可方式中自动对那二种情状做了细微调治,当然也得以团结扩充那二种选拔形式。

测试:

if(function_exists('saeAutoLoader')){// 自动识别SAE环境
  defined('APP_MODE')   or define('APP_MODE',   'sae');
  defined('STORAGE_TYPE') or define('STORAGE_TYPE', 'Sae');
}else{
  defined('APP_MODE')   or define('APP_MODE',    'common'); // 应用模式 默认为普通模式  
  defined('STORAGE_TYPE') or define('STORAGE_TYPE',  'File'); // 存储类型 默认为File  
}

图片 3

二、应用形式定义

 

在ThinkPHP框架其中除了ThinkPHP框架入口和框架带领类以外,基本享有其他功用都得以透过采取格局打开改造和扩大,假诺大家要扩充叁个使用格局,只须求在ThinkPHPMode目录上边定义二个方式定义文件就能够,我们得以经过分析common方式实行学习。该文件的代码如下:

 

//文件路径:ThinkPHP/Mode/common.php
/**
 * ThinkPHP 普通模式定义
 * 定义一个模式文件,只需要返回一个模式包含文件的数组即可
 * 在数组中主要包含4种扩展文件列表:
 *   config 为默认加载配置文件列表
 *   alias 为核心类库别名配置列表
 *   core 需要加载的核心函数和类文件列表
 *   tags 行为配置列表
 *
 * 如果在应用模式定义中加载一个自定类,那个自定义类的命名空间必须是Think
 */
return array(
  // 配置文件
  'config'  => array(
    THINK_PATH.'Conf/convention.php',  // 系统惯例配置
    CONF_PATH.'config.php',   // 应用公共配置
  ),

  // 别名定义
  'alias'   => array(
    'ThinkLog'        => CORE_PATH . 'Log'.EXT,
    'ThinkLogDriverFile'  => CORE_PATH . 'Log/Driver/File'.EXT,
    'ThinkException'     => CORE_PATH . 'Exception'.EXT,
    'ThinkModel'       => CORE_PATH . 'Model'.EXT,
    'ThinkDb'        => CORE_PATH . 'Db'.EXT,
    'ThinkTemplate'     => CORE_PATH . 'Template'.EXT,
    'ThinkCache'       => CORE_PATH . 'Cache'.EXT,
    'ThinkCacheDriverFile' => CORE_PATH . 'Cache/Driver/File'.EXT,
    'ThinkStorage'      => CORE_PATH . 'Storage'.EXT,
  ),

  // 函数和类文件
  'core'   => array(
    THINK_PATH.'Common/functions.php',
    COMMON_PATH.'Common/function.php',
    CORE_PATH . 'Hook'.EXT,
    CORE_PATH . 'App'.EXT,
    CORE_PATH . 'Dispatcher'.EXT,
    //CORE_PATH . 'Log'.EXT,
    CORE_PATH . 'Route'.EXT,
    CORE_PATH . 'Controller'.EXT,
    CORE_PATH . 'View'.EXT,
    BEHAVIOR_PATH . 'BuildLiteBehavior'.EXT,
    BEHAVIOR_PATH . 'ParseTemplateBehavior'.EXT,
    BEHAVIOR_PATH . 'ContentReplaceBehavior'.EXT,
  ),
  // 行为扩展定义
  'tags' => array(
    'app_init'   => array(
      'BehaviorBuildLiteBehavior', // 生成运行Lite文件
    ),    
    'app_begin'   => array(
      'BehaviorReadHtmlCacheBehavior', // 读取静态缓存
    ),
    'app_end'    => array(
      'BehaviorShowPageTraceBehavior', // 页面Trace显示
    ),
    'view_parse'  => array(
      'BehaviorParseTemplateBehavior', // 模板解析 支持PHP、内置模板引擎和第三方模板引擎
    ),
    'template_filter'=> array(
      'BehaviorContentReplaceBehavior', // 模板输出替换
    ),
    'view_filter'  => array(
      'BehaviorWriteHtmlCacheBehavior', // 写入静态缓存
    ),
  ),
);

Google语法:

咱俩看看那么些平凡应用情势代码之后,有一点点明了ThinkPHP的使用情势扩大是怎么回事了,然则依然知其但是不知其所以然,定义二个加载文件列表和布署是怎么样转移框架宗旨的啊?秘密就在ThinkPHP指点类中,让大家再纪念以下吧!

inurl:index.php intext:ThinkPHP 2.1 { 法斯特 & Simple OOP PHP Framework }  禁止用在违法用途

//判断是否存在core.php配置文件(这是开发环境临时定义的运行模式,我是这么理解的)
     //否者加载APP_MODE定义的模式文件
     $mode  =  include is_file(CONF_PATH.'core.php')?CONF_PATH.'core.php':MODE_PATH.APP_MODE.'.php';
     //加载模式中core定义的核心文件列表
     foreach ($mode['core'] as $file){
       if(is_file($file)) {
        include $file;
        if(!APP_DEBUG) $content  .= compile($file);
       }
     }

     //加载模式中定义的config配置文件列表
     foreach ($mode['config'] as $key=>$file){
       is_numeric($key)?C(include $file):C($key,include $file);
     }

     // 读取当前应用模式对应的配置文件
     if('common' != APP_MODE && is_file(CONF_PATH.'config_'.APP_MODE.'.php'))
       C(include CONF_PATH.'config_'.APP_MODE.'.php'); 

     // 加载模式中alias别名列表定义
     if(isset($mode['alias'])){
       self::addMap(is_array($mode['alias'])?$mode['alias']:include $mode['alias']);
     }

     // 加载应用别名定义文件
     if(is_file(CONF_PATH.'alias.php'))
       self::addMap(include CONF_PATH.'alias.php');

     // 加载模式中tags行为定义
     if(isset($mode['tags'])) {
       Hook::import(is_array($mode['tags'])?$mode['tags']:include $mode['tags']);
     }

     // 加载应用行为定义
     if(is_file(CONF_PATH.'tags.php'))
       // 允许应用增加开发模式配置定义
       Hook::import(include CONF_PATH.'tags.php'); 

     // 加载框架底层语言包
     L(include THINK_PATH.'Lang/'.strtolower(C('DEFAULT_LANG')).'.php');

本文由68399皇家赌场发布于呼叫中心培训课程,转载请注明出处:1版代码执行漏洞,ThinkPHP应用模式扩展详解

关键词: 68399皇家赌场

上一篇:缓冲技术中常用几个实例,导出导入表格

下一篇:没有了

最火资讯