Ectouch2.0 分析解读代码审计流程
0x1 目录结构
显示目录结构:tree -L 2 -C -d
├── _docs
├── admin //默认后台目录
│ ├── help
│ ├── images
│ ├── includes
│ ├── js
│ ├── styles
│ └── templates
├── api
│ └── notify
├── data //静态资源和系统缓存、配置目录
│ ├── assets //静态资源目录
│ ├── attached //附件目录
│ ├── backup //备份目录
│ ├── caches //缓存目录
│ ├── captcha //验证码图片
│ ├── certificate //验证
│ ├── codetable
│ ├── ipdata
│ ├── migrates
│ ├── print
│ ├── session
│ ├── sqldata
│ └── template
├── include //核心目录
│ ├── apps //主程序(模块目录)
│ ├── base //基础程序
│ ├── classes //类文件
│ ├── config //配置文件
│ ├── helpers //助手函数
│ ├── languages //语言包
│ ├── libraries //主类库
│ ├── modules //模块
│ └── vendor //第三方扩展类
├── install //安装模块
│ ├── sqldata
│ └── templates
├── plugins //插件程序目录
│ ├── connect
│ ├── editor
│ ├── integrates
│ ├── payment
│ ├── shipping
│ └── wechat
└── themes //系统默认模版目录
└── ecmoban_zsxn
参考链接:
ectouch第二讲之 文件结构
这样就可以确定重点是:include 文件夹
0x2 路由分析
入口文件index.php->引导文件bootstrap.php->urlRoute()路由解析->dispatc()路由调度
为了方便理解,我在这里分析下路由(这里有两种模式)
因为一般模式mvc都会用
/index.php?m=admin&c=index&a=index
所以在这里分析兼容模式下路由规则:
26-24 lines
$varPath = C('VAR_PATHINFO');//c函数是获取配置参数的值
$varModule = C('VAR_MODULE');
$varController = C('VAR_CONTROLLER');
$varAction = C('VAR_ACTION');
$urlCase = C('URL_CASE_INSENSITIVE');
if(isset($_GET[$varPath])) { // 判断URL里面是否有兼容模式参数
$_SERVER['PATH_INFO'] = $_GET[$varPath]; //获取r=xx的内容给$_SERVER['PATH_INFO']
unset($_GET[$varPath]); //释放变量
}
41-59 lines
$depr = C('URL_PATHINFO_DEPR'); //兼容模式分隔符 r
define('MODULE_PATHINFO_DEPR', $depr);
if(empty($_SERVER['PATH_INFO'])) {
$_SERVER['PATH_INFO'] = '';
define('__INFO__','');
define('__EXT__','');
}else{
define('__INFO__',trim($_SERVER['PATH_INFO'],'/')); //去除多余的/
// URL后缀
define('__EXT__', strtolower(pathinfo($_SERVER['PATH_INFO'],PATHINFO_EXTENSION))); //获取文件后缀之后的内容
$_SERVER['PATH_INFO'] = __INFO__;
if (__INFO__ && !defined('BIND_MODULE') && C('MULTI_MODULE')){ // 获取模块名
$paths = explode($depr,__INFO__,2);//切割__INFO__
$module = preg_replace('/.' . __EXT__ . '$/i', '',$paths[0]);//处理后缀
$_GET[$varModule] = $module;
0x1 目录结构
显示目录结构:tree -L 2 -C -d
├── _docs
├── admin //默认后台目录
│ ├── help
│ ├── images
│ ├── includes
│ ├── js
│ ├── styles
│ └── templates
├── api
│ └── notify
├── data //静态资源和系统缓存、配置目录
│ ├── assets //静态资源目录
│ ├── attached //附件目录
│ ├── backup //备份目录
│ ├── caches //缓存目录
│ ├── captcha //验证码图片
│ ├── certificate //验证
│ ├── codetable
│ ├── ipdata
│ ├── migrates
│ ├── print
│ ├── session
│ ├── sqldata
│ └── template
├── include //核心目录 无奈人生安全网
│ ├── apps //主程序(模块目录)
│ ├── base //基础程序
│ ├── classes //类文件
│ ├── config //配置文件
│ ├── helpers //助手函数
│ ├── languages //语言包
│ ├── libraries //主类库
│ ├── modules //模块
│ └── vendor //第三方扩展类
├── install //安装模块
│ ├── sqldata
│ └── templates
├── plugins //插件程序目录
│ ├── connect
│ ├── editor
│ ├── integrates
│ ├── payment
│ ├── shipping
│ └── wechat
└── themes //系统默认模版目录
└── ecmoban_zsxn
参考链接:
ectouch第二讲之 文件结构
这样就可以确定重点是:include 文件夹
0x2 路由分析
入口文件index.php->引导文件bootstrap.php->urlRoute()路由解析->dispatc()路由调度 copyright 无奈人生
为了方便理解,我在这里分析下路由(这里有两种模式)
因为一般模式mvc都会用
/index.php?m=admin&c=index&a=index
所以在这里分析兼容模式下路由规则:
26-24 lines
$varPath = C('VAR_PATHINFO');//c函数是获取配置参数的值
$varModule = C('VAR_MODULE');
$varController = C('VAR_CONTROLLER');
$varAction = C('VAR_ACTION');
$urlCase = C('URL_CASE_INSENSITIVE');
if(isset($_GET[$varPath])) { // 判断URL里面是否有兼容模式参数
$_SERVER['PATH_INFO'] = $_GET[$varPath]; //获取r=xx的内容给$_SERVER['PATH_INFO'] 内容来自无奈安全网
unset($_GET[$varPath]); //释放变量
}
41-59 lines
$depr = C('URL_PATHINFO_DEPR'); //兼容模式分隔符 r
define('MODULE_PATHINFO_DEPR', $depr);
if(empty($_SERVER['PATH_INFO'])) {
$_SERVER['PATH_INFO'] = '';
define('__INFO__','');
define('__EXT__','');
}else{
define('__INFO__',trim($_SERVER['PATH_INFO'],'/')); //去除多余的/
// URL后缀
copyright 无奈人生
define('__EXT__', strtolower(pathinfo($_SERVER['PATH_INFO'],PATHINFO_EXTENSION))); //获取文件后缀之后的内容
$_SERVER['PATH_INFO'] = __INFO__;
if (__INFO__ && !defined('BIND_MODULE') && C('MULTI_MODULE')){ // 获取模块名
$paths = explode($depr,__INFO__,2);//切割__INFO__
$module = preg_replace('/.' . __EXT__ . '$/i', '',$paths[0]);//处理后缀
$_GET[$varModule] = $module;
copyright 无奈人生
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] 下一页
www.wnhack.com