欢迎光临散文网 会员登陆 & 注册

Thinkphp5代码审计(一)

2023-02-20 16:31 作者:J_Chanra  | 我要投稿

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的原理。


Thinkphp5代码审计(一)的评论 (共 条)

分享到微博请遵守国家法律