Thinkphp5代码审计(一)
PS:上次文章篇幅太长,导致图片发不全,这次把文章拆开。。。。
简介
ThinkPHP5.0版本是一个颠覆和重构版本,采用全新的架构思想,引入了更多的PHP新特性,优化了核心,减少了依赖,实现了真正的惰性加载,支持composer,并针对API开发做了大量的优化,包括路由、日志、异常、模型、数据库、模板引擎和验证等模块都已经重构,不适合原有3.2项目的升级。
环境
注意:PHP5.4DEV和PHP6不支持运行

开始使用
将下载好的thinkphp放到web目录下,访问url验证
如果浏览器输出如图所示,说明安装成功

hello world
找到/thinkphp_5.0.15/application/index/controller/Index.php
修改代码如下
浏览器访问
显示hello world

目录结构
运行没有问题了,就来看下目录结构
如果已经看了前面的thinkphp3的代码审计文章或者视频,那么一定会感到有点熟悉。没看过也不要紧,这些只需要简单了解。
thinkphp5的MVC
Thinkphp是一个基于MVC的框架,简单看下MVC都做些什么
控制器Controller
每个模块拥有独立的MVC
类库及配置文件,一个模块下面有多个控制器负责响应请求,而每个控制器其实就是一个独立的控制器类。
控制器主要负责请求的接收,并调用相关的模型处理,并最终通过视图输出。严格来说,控制器不应该过多的介入业务逻辑处理。

模型Model
模型类通常完成实际的业务逻辑和数据封装,并返回和格式无关的数据。

视图View
控制器调用模型类后返回的数据通过视图组装成不同格式的输出。视图根据不同的需求,来决定调用模板引擎进行内容解析后输出还是直接输出。
视图通常会有一系列的模板文件对应不同的控制器和操作方法,并且支持动态设置模板目录。
url模式
ThinkPHP5.0
在没有启用路由的情况下典型的URL访问规则是
支持切换到命令行访问,如果切换到命令行模式下面的访问规则是:
可以看到,无论是URL访问还是命令行访问,都采用PATH_INFO
访问地址,其中PATH_INFO
的分隔符是可以设置的。
注意:5.0
取消了URL模式的概念,并且普通模式的URL访问不再支持,但参数可以支持普通方式传值
如果不支持PATHINFO的服务器可以使用兼容模式访问如下
URL大小写
默认情况下,URL
是不区分大小写的,也就是说 URL
里面的模块/控制器/操作名会自动转换为小写,控制器在最后调用的时候会转换为驼峰法处理。
当然也可以在配置文件中改为区分大小写

路由
个人认为路由是给某些资源绑定了特殊的名字。开发者预先设置好一些特殊的操作,并绑定对应的uri,配置了路由后,用户和开发者访问某个uri,即可执行预先设置的操作。
ThinkPHP5.0的路由支持三种方式的URL解析规则。
一、普通模式
关闭路由,完全使用默认的PATH_INFO
方式URL:
路由关闭后,不会解析任何路由规则,采用默认的PATH_INFO
模式访问URL:
二、混合模式
开启路由,并使用路由定义+默认PATH_INFO
方式的混合
该方式下面,只需要对需要定义路由规则的访问地址定义路由规则,其它的仍然按照第一种普通模式的PATH_INFO
模式访问URL。
三、强制模式
开启路由,并设置必须定义路由才能访问:
如果未开启强制路由,那么可能会导致rce。本篇先了解下框架知识,下一篇分析rce的原理。