Thinkphp5代碼審計(jì)(一)
PS:上次文章篇幅太長(zhǎng),導(dǎo)致圖片發(fā)不全,這次把文章拆開(kāi)。。。。
簡(jiǎn)介
ThinkPHP5.0版本是一個(gè)顛覆和重構(gòu)版本,采用全新的架構(gòu)思想,引入了更多的PHP新特性,優(yōu)化了核心,減少了依賴,實(shí)現(xiàn)了真正的惰性加載,支持composer,并針對(duì)API開(kāi)發(fā)做了大量的優(yōu)化,包括路由、日志、異常、模型、數(shù)據(jù)庫(kù)、模板引擎和驗(yàn)證等模塊都已經(jīng)重構(gòu),不適合原有3.2項(xiàng)目的升級(jí)。
環(huán)境
注意:PHP5.4DEV和PHP6不支持運(yùn)行

開(kāi)始使用
將下載好的thinkphp放到web目錄下,訪問(wèn)url驗(yàn)證
如果瀏覽器輸出如圖所示,說(shuō)明安裝成功

hello world
找到/thinkphp_5.0.15/application/index/controller/Index.php
修改代碼如下
瀏覽器訪問(wèn)
顯示hello world

目錄結(jié)構(gòu)
運(yùn)行沒(méi)有問(wèn)題了,就來(lái)看下目錄結(jié)構(gòu)
如果已經(jīng)看了前面的thinkphp3的代碼審計(jì)文章或者視頻,那么一定會(huì)感到有點(diǎn)熟悉。沒(méi)看過(guò)也不要緊,這些只需要簡(jiǎn)單了解。
thinkphp5的MVC
Thinkphp是一個(gè)基于MVC的框架,簡(jiǎn)單看下MVC都做些什么
控制器Controller
每個(gè)模塊擁有獨(dú)立的MVC
類(lèi)庫(kù)及配置文件,一個(gè)模塊下面有多個(gè)控制器負(fù)責(zé)響應(yīng)請(qǐng)求,而每個(gè)控制器其實(shí)就是一個(gè)獨(dú)立的控制器類(lèi)。
控制器主要負(fù)責(zé)請(qǐng)求的接收,并調(diào)用相關(guān)的模型處理,并最終通過(guò)視圖輸出。嚴(yán)格來(lái)說(shuō),控制器不應(yīng)該過(guò)多的介入業(yè)務(wù)邏輯處理。

模型Model
模型類(lèi)通常完成實(shí)際的業(yè)務(wù)邏輯和數(shù)據(jù)封裝,并返回和格式無(wú)關(guān)的數(shù)據(jù)。

視圖View
控制器調(diào)用模型類(lèi)后返回的數(shù)據(jù)通過(guò)視圖組裝成不同格式的輸出。視圖根據(jù)不同的需求,來(lái)決定調(diào)用模板引擎進(jìn)行內(nèi)容解析后輸出還是直接輸出。
視圖通常會(huì)有一系列的模板文件對(duì)應(yīng)不同的控制器和操作方法,并且支持動(dòng)態(tài)設(shè)置模板目錄。
url模式
ThinkPHP5.0
在沒(méi)有啟用路由的情況下典型的URL訪問(wèn)規(guī)則是
支持切換到命令行訪問(wèn),如果切換到命令行模式下面的訪問(wèn)規(guī)則是:
可以看到,無(wú)論是URL訪問(wèn)還是命令行訪問(wèn),都采用PATH_INFO
訪問(wèn)地址,其中PATH_INFO
的分隔符是可以設(shè)置的。
注意:5.0
取消了URL模式的概念,并且普通模式的URL訪問(wèn)不再支持,但參數(shù)可以支持普通方式傳值
如果不支持PATHINFO的服務(wù)器可以使用兼容模式訪問(wèn)如下
URL大小寫(xiě)
默認(rèn)情況下,URL
是不區(qū)分大小寫(xiě)的,也就是說(shuō)?URL
里面的模塊/控制器/操作名會(huì)自動(dòng)轉(zhuǎn)換為小寫(xiě),控制器在最后調(diào)用的時(shí)候會(huì)轉(zhuǎn)換為駝峰法處理。
當(dāng)然也可以在配置文件中改為區(qū)分大小寫(xiě)

路由
個(gè)人認(rèn)為路由是給某些資源綁定了特殊的名字。開(kāi)發(fā)者預(yù)先設(shè)置好一些特殊的操作,并綁定對(duì)應(yīng)的uri,配置了路由后,用戶和開(kāi)發(fā)者訪問(wèn)某個(gè)uri,即可執(zhí)行預(yù)先設(shè)置的操作。
ThinkPHP5.0的路由支持三種方式的URL解析規(guī)則。
一、普通模式
關(guān)閉路由,完全使用默認(rèn)的PATH_INFO
方式URL:
路由關(guān)閉后,不會(huì)解析任何路由規(guī)則,采用默認(rèn)的PATH_INFO
?模式訪問(wèn)URL:
二、混合模式
開(kāi)啟路由,并使用路由定義+默認(rèn)PATH_INFO
方式的混合
該方式下面,只需要對(duì)需要定義路由規(guī)則的訪問(wèn)地址定義路由規(guī)則,其它的仍然按照第一種普通模式的PATH_INFO
模式訪問(wèn)URL。
三、強(qiáng)制模式
開(kāi)啟路由,并設(shè)置必須定義路由才能訪問(wèn):
如果未開(kāi)啟強(qiáng)制路由,那么可能會(huì)導(dǎo)致rce。本篇先了解下框架知識(shí),下一篇分析rce的原理。