代码审计准备之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.csdn.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。
代码审计准备之Thinkphp3的更多相关文章
- thinkphp3.2.3代码审计
<?php namespace Home\Controller; use Think\Controller; class UserController extends Controller { ...
- 代码审计-Thinkphp3框架EXP表达式SQL注入
最近看java框架源码也是看的有点头疼,好多还要复习熟悉 还有好多事没做...慢慢熬. 网上好像还没有特别详细的分析 我来误人子弟吧. 0x01 tp3 中的exp表达式 查询表达式的使用格式: $m ...
- 代码审计-thinkphp3.2.3框架漏洞sql注入
开始复现审计一下tp3和tp5的框架漏洞,当个练习吧. 涉及注入的方法为where() table() delete()等. 环境 tp3.2.3 : 0x01 注入成因 测试代码: public f ...
- PHP代码审计05之正则使用不当
前言 根据红日安全写的文章,学习PHP代码审计的第五节内容,题目均来自PHP SECURITY CALENDAR 2017,讲完题目会用一道CTF的题目和实例来加深巩固.这是之前写的,有兴趣可以去看看 ...
- Thinkphp3分析与审计
0x00 前言: 这篇是去年组内分享的时候给小伙伴写的0基础快速审计tp3系列的文章,主要是对架构做个分析以及审计一些sql注入漏洞~ 现在想想打算放出来,过了一年了,可能里面有一些问题,望看到的大佬 ...
- thinkphp3.2.3中U()方法和redirect()方法区别
今天博主看3.1的教程,学着3.2,就遇到了这个坑,怎么就是不跳转呢,很纳闷!! 在thinkphp3.1 中 U()方法是可以执行跳转的(看视频教程里面是可以的,博主没有测试过). 但是在think ...
- thinkphp3.2.3版本文件目录及作用
下载thinkphp3.2.3版本,解压缩后将文件夹名字改为thinkphp,然后放在www目录下,里面的文件夹和文件的名字和作用如下:(前面有Tab健的表示下一级,thinkphp是根目录) //t ...
- 基于ThinkPHP3的微信平台开发_1
微信公众平台是个好东西,具体的就不说了,我直接说技术>_< 下图为目录结构一览: 微信开发 - 文件目录结构 平台功能: 此次开发的平台是面向多微信公众号.微信多公众号主(下面简称号主)的 ...
- Thinkphp3.2.3使用Ajax一定注意 数据返回
Thinkphp3.2.3使用Ajax一定注意 数据返回 $data = 'ok'; $this->ajaxReturn($data); 不能直接 echo $data;
随机推荐
- Google 官方 侧滑 drawerlayout
一.概述 目前侧滑框架已经很多了,但是我常用的也就那么2个 ,slidingmenu 和sidemenu-android, 但是项目要求使用官方的,所以就看了一下drawerlayout 二.代码 官 ...
- Docker入门到实践——简单操作
1.对比传统虚拟机总结 特性 容器 虚拟机 启动 秒级 分钟级 硬盘使用 一般为MB 一般为GB 性能 接近原生 弱于 系统支持量 单机支持上千个容器 一般几十个 2.基本概念 Docker包括三个基 ...
- nexus 私服 低配置服务器启动不能访问的问题
1核1G的渣渣服务器启动无法访问. 请更换更高配置的服务器.
- Python:给定一个不超过5位的正整数,判断有几位
方法一:作比较 [root@python markPy]# cat five.py #!/usr/bin/python3 a=int(input(">>>>" ...
- WInform中实现设置ZedGraph中曲线的X轴与Y轴的上限与下限
场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...
- iOS 13 正式发布,来看看有哪些 API 变动
iOS 13 已正式发布,网上对其用户体验上的新特性的描述也很多.对于开发来说,需要关注的另一方面是新系统在 API 层面做了哪些改动,从而会对我们现有的代码产生什么影响. 在这里,我们基于 iOS ...
- Java程序连接数据库
/** * 了解: 利用 Driver 接口的 connect 方法获取连接 */ // 第一种实现 /** * 了解: 利用 Driver 接口的 connect 方法获取连接 */ @Test p ...
- Oracle内置函数之数值型函数
think different
- 从零开始入门 K8s | 应用编排与管理(酒祝)
一.需求来源 背景问题 首先来看一下背景问题.如下图所示:如果我们直接管理集群中所有的 Pod,应用 A.B.C 的 Pod,其实是散乱地分布在集群中. 现在有以下的问题: 首先,如何保证集群内可用 ...
- FTP无法登录问题-内有网盘福利
http://dinghuqiang.blog.51cto.com/19871/701185/ 一顿操作猛如虎,还是没解决. 然后我想想,会不会是浏览器缓存问题? 换个火狐登录看看! 哇擦!看到报错了 ...