最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

ThinkPHP3.2.3

XAMPP教程 中文小张 1207浏览 0评论

   ThinkPHP框架是当前国内最流行的PHP框架之一,虽然TP3.2.3这个版本和国外的开源框架还是有一定距离,但是人家教程多,用户量多,中文文档写得奇的优点,现在工作的公司用的是thinkphp3.2框架进行开发,TP框架为我们开发者提供了底层的安全过滤功能,所以我在使用TP框架开发的时候并没有很仔细的去想过安全的问题,而最近也是挤出了一点时间,想知道TP框架底层是如何运作的,底层是如何防注入的,看了一下文档,看了一下源码,找了一些资料,整理出了一些TP框架运行的原理。

0x02 简介

通读源码的话,当然要从下载源码开始 : )

下载地址:http://www.thinkphp.cn/down/610.html

版本:ThinkPHP3.2.3完整版

技术准备:PHP基础,MySql基础

使用工具:Visutal Studio Code

服务器环境:xampp

推荐使用:phpStudy (推荐使用这个免得为了环境的问题浪费时间)

安装教程什么的话,我就省略了,我们直接进入正题

0x03 思路

接下来介绍一下大概的思路(完成),然后介绍框架运行的原理,在然后说一下防注入的方法,最后说说审计Tp的思路与方法

本文相关文件:

系统公共函数库: \ThinkPHP\Common\functions.php (封装了TP开放给外部的函数)

ThinkPHP Model模型类: ThinkPHP\Library\Think\Model.class.php (TP的数据库架构类,提供curd类库,是一个对外的接口 )

TP内部curd类: ThinkPHP\Library\Think\Db\Driver.class.php (这个类的函数都被Model类中的curd操作间接的调用)

这里的话要大概说一下Tp在执行数据库操作之前的处理思路。

  1. 函数M使用了以后会自动创建new Model类并且会实例化为一个对象返回此资源,

    Ps:这里我们的M(‘goods’) goods是你的数据库表名,我们后面都简称为goods对象,

  2. 接着这个goods对象调用了where方法并且格式化处理以后,会将这个值赋值给goods对象的一个成员变量$options(注:这里需要特别说明一点,如果说我们在goods对象中有调用其他的方法赋值例如where,table,alias,data,field,order,limit,page,group,having,join,union,distinct,lock,cache,comment等等这种操作方法,那么都会先赋值给goods对象,而不是在代码直接进行sql语句拼接,所以我们使用Tp的连贯操作的时候,就不需要像SQL语句拼接那样需要考虑到关键字的顺序问题,想了解有关于M函数的具体信息的请下载TP3.2.3开发手册中的模型与连贯操作进行仔细了解,(因为时间的问题这里就不很仔细的讲解)
  3. 处理完了前面选项之后,接下来就会去调用我们的find()方法去调用底层的一个select方法(Driver.class.php这个类中的select方法)来获取数据。所谓的find()方法就是等同于先给goods对象的一个成员变量$options赋值操作limit=1然后进行select操作来获取对应的数据。
  4. 到了select操作以后又是一个完全不一样的世界。

    最终执行的sql语句的话大概是这样:

SELECT * FROM `tdb_goods` WHERE goods_name='R510VC 15.6英寸笔记本' limit 1

如果给他赋值了一个操作例如

M('goods')->field('goods_id,goods_name')->where( array('goods_name'=>$goods_name) )->find();

最终执行的sql语句:

SELECT goods_id,goods_name FROM `tdb_goods` WHERE goods_name='R510VC 15.6英寸笔记本' limit 1

Driver.class.php这个类中除了处理curd操作,还处理pdo绑定,这里的pdo绑定并不是我们本文的重点内容所以简单提起他知道有这么一个东西就完了,我们的重点是了解TP的curd操作是如何进行的。

//这里可以开始真真分析了 说明连接的过程执行的操作等

0x04 正文

我们一个一个解释来,先按顺序来介绍Model模型类几个重要的成员变量

转载请注明:XAMPP中文组官网 » ThinkPHP3.2.3

您必须 登录 才能发表评论!