作为一名准备成为CTF里WEB狗的萌新,在做了3个月的CTF的web题后,发现自己php代码审计非常不过关,并且web的架构模式条理也十分的不清晰,于是抱着提高代码审计能力的态度在近期会去写一个简单的cms(其实现在怎么写思路还是不清晰)
环境搭建:vmware虚拟环境,win7系统,web采用快捷方便的phpstudy(包含php很多版本,apache,mysql)
thinkphp,在中文官网中将压缩文件下载下来,解压到phpstudy/PHPTutorial/WWW/tp新建目录下
开启phpstudy的apache服务器。
在本机中(整个网站架构我是放在虚拟机中的)url输入:虚拟机ip/tp/public/index.php
写这篇文章的时候,这里主页面的index我已经改过了,原版的界面应该是一个 :)这样的一个欢迎界面
所以所访问thinkphp5这个架构的入口即在public/index.php这个文件中,看看文件里面的内容
<?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK ] // +---------------------------------------------------------------------- // | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: liu21st <liu21st@gmail.com> // +---------------------------------------------------------------------- // [ 应用入口文件 ] // 定义应用目录 define('APP_PATH', __DIR__ . '/../application/'); // 加载框架引导文件 require __DIR__ . '/../thinkphp/start.php';
这里的代码明显不是本体内容,它下一步调用了tp/thinkphp/start.php
我们接下来查看该文件内容
<?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK ] // +---------------------------------------------------------------------- // | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: liu21st <liu21st@gmail.com> // +---------------------------------------------------------------------- namespace think; // ThinkPHP 引导文件 // 1. 加载基础文件 require __DIR__ . '/base.php'; // 2. 执行应用 App::run()->send();
这个文件里面还不是目的代码,他是走的同级目录下的base.php这个文件(5.1版本中没有start.php这个中转文件,直接是index.php跳转于base.php)
base.php这个文件内容我目前没看懂,它作用是会重定向到tp/application/index/controller/Index.php中,而这个文件就是在网页上访问显示的文件,最先给的demo里面就是个php代码里面输出个html页面。(这里我进行了修改,但内容无非是一个内,可以进行继承,并且能调用命名空间)
<?php namespace appindexcontroller; use thinkController; use thinkDb; class Index extends Controller { public function index() { $data = Db::name('data')->find(); $this->assign('result', $data); return $this->fetch(); } }
而thinkphp这个架构是使用是mvc架构,意思是模型,视图,控制器是三个独立分开的,我在index.php文件中继承了Controller类这个类中的assign函数和fetch函数能够使值传到V(视图)模块中,上面的index.php是C(控制器)模块,而我们真真输出的是在V(视图)文件中,这个文件夹是我手动创建的。
就一个简单的html文件。
这里插播一下,我们回来看public这个目录下
那个static文件夹是做什么的?这里在官方手册中解释是放js,css这些前端的格式样式的,而且这些可以放在其他地方,但是最好放在这里(官方说)
最后就是调用数据库里面的信息了,其实上面的tp/application/index/controller/Index.php中的代码意思就是调用了数据库中的文件。
这里我用phpmyadmin管理系统在浏览器中添加了demo这个数据库,并创建了think_php这个表,里面添加了3个元素。
说下我最先,觉得这个数据库文件必须放在tp这个目录下什么位置(因为最先在phpstduy中phpmyadmin和mysql的目录并不是在tp这个文件目录下的),但是我发现,只要是在web服务器上的数据库里面,thinkphp就能访问到,但是访问前要设置下database.php这个文件
然后设置账号和密码,这里phpstudy安装后mysql的默认账号和密码是root,然后设置数据库名称,和表名前缀(表名前缀可以不设置,就是在index.php中调用时要补全名)
至此再访问public/index.php就返回的数据库里面的信息了(前提是application/index/controller/index.php中写了调用的,并且view中的html文件也进行了相应参数的输出)