代码审计准备之Thinkphp3
代码审计准备之Thinkphp3
0x01环境部署:
下载:
获取ThinkPHP的方式很多,官方网站(http://thinkphp.cn)是最好的下载和文档获取来源。
官网提供了稳定版本的下载:http://thinkphp.cn/down/framework.html
官网下载版本提供了完整版和核心版两个版本,核心版本只保留了核心类库和必须的文件,去掉了所有的扩展类库和驱动,支持标准模式和SAE模式。
如果你希望保持最新的更新,可以通过github获取当前最新的版本(完整版)。
Git获取地址列表(你可以选择一个最快的地址):
Github:
https://github.com/liu21st/thinkphp
Oschina:http://git.oschina.net/liu21st/thinkphp.git
Code:https://code.****.net/topthink2011/ThinkPHP
3.2版本也支持composer安装,确保你的电脑已经安装了composer,然后在你的web根目录下面执行 composer create-project topthink/thinkphp your-project-name
(注意:目前国内的速度很慢 建议直接下载官网版本)
ThinkPHP无需任何安装,直接拷贝到你的电脑或者服务器的WEB运行目录下面即可。
安装:
首次Application目录是空的,访问一次以后会生成文件。
数据库:
在配置文件中配置相应的配置:
Application\Conf\config文件
/* 数据库设置 */ 'DB_TYPE' => 'mysql', // 数据库类型 'DB_HOST' => '', // 服务器地址 'DB_NAME' => '', // 数据库名 'DB_USER' => '', // 用户名 'DB_PWD' => '', // 密码 'DB_PORT' => '', // 端口 'DB_PREFIX' => '', // 数据库表前缀 'DB_PARAMS' => array(), // 数据库连接参数 'DB_DEBUG' => TRUE, // 数据库调试模式 开启后可以记录SQL日志 'DB_FIELDS_CACHE' => true, // 启用字段缓存 'DB_CHARSET' => 'utf8', // 数据库编码默认采用utf8 'DB_DEPLOY_TYPE' => 0, // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器) 'DB_RW_SEPARATE' => false, // 数据库读写是否分离 主从式有效 'DB_MASTER_NUM' => 1, // 读写分离后 主服务器数量 'DB_SLAVE_NO' => '', // 指定从服务器序号
测试
现在在Application\Home\Controller\目录下的IndexController.class.php文件加入一个查询、打印数据的方法 看看是否正常运行。
public function test(){ $data = M('user')->where('id=1')->select(); dump($data); }
访问
http://127.0.0.1/thinkphp3/index.php/home/index/test
0x02 常用函数和访问模式
Url 访问
1.PATHINFO 模式 http://域名/项目名/入口文件/模块名/方法名/键 1/值 1/键 2/值 2
2.普通模式 http://域名/项目名/入口文件?m=模块名&c=控制器名&a=方法名&键 1=值 1&键 2=值 2
控制器操作
1)A方法
跨域控制器实例化后,再调用被实例化对象的方法。
$User = A('User'); $User->index();
例如我Index控制器想调用User控制器的index方法,我们在Index控制器中定义方法调用A方法。
public function getUserIndex(){ $User = A('User'); $User->index(); }
此时我们访问Index控制的getUserIndex函数
http://127.0.0.1/thinkphp3/index.php/home/index/getUserIndex
2)R方法
R方法更简单
3)I 方法
Action参数绑定
Action参数绑定是通过直接绑定URL地址中的变量作为操作方法的参数,Action参数绑定功能默认是开启的,其原理是把URL中的参数(不包括模块、控制器和操作名)和操作方法中的参数进行绑定。
'URL_PARAMS_BIND' => true, // URL变量绑定到操作方法作为参数
比如我在Index控制器定义如下方法
如果我需要传入一个id为100,访问的地址就应该是
http://127.0.0.1/thinkphp3/index.php/home/index/getUserIndex/id/100
但是官方推荐 I 方法
I方法是ThinkPHP用于更加方便和安全的获取系统输入变量,可以用于任何地方,用法格式如下:
I('变量类型.变量名/修饰符',['默认值'],['过滤方法'],['额外数据源'])
变量类型是指请求方式或者输入类型,包括:
I 方法使用
$id = I('user','1','intval'); dump($id);
传入的参数使用intval函数转成整数型,不传参数默认为1
0x03 插件控制器
3.2.2版本开始支持插件控制器的调用,可以通过更加方便的URL地址访问到模块中的插件定义的控制器。
当URL中传入插件控制器变量的时候,会自动定位到插件控制器中的操作方法。
插件控制器的变量由参数 VAR_ADDON 进行设置,默认为addon,例如我们在URL中传入: http://serverName/Home/info/index/addon/SystemInfo
由于传入了addon参数,因此这里的Info控制器并非原来的 Home/Controller/InfoController.class.php
而是调用SystemInfo插件(位于Home/Addon目录下面)的InfoController控制器了,文件位于 Home/Addon/SystemInfo/Controller/InfoController.class.php
。