当你分析一个WEB框架的漏洞时先要简单了解下WEB框架的使用与结构,下面是斗哥带来Laravel框架使用与后期Laravel框架漏洞分析。
Laravel简介
1、简介:
Laravel是易于理解且强大的,它提供了强大的工具用于以开发大型,健壮的应用;
具有验证、路由、Session、缓存、数据库迁移工具、单元测试等常用的工具和功能。
目前大部分的框架公共的特点:
1、单入口,所有的请求必须从单入口开始,主要是便于管理(统一的参数过滤)
2、MVC的思想(分层思想,主要是为了协同开发,实现后期的维护方便)
3、ORM操作数据库(Object Relations Model)
注意:Laravel框架有一个特点,所有的URL访问都必须事先定好路由规则
2、创建Laravel项目:
1、将要解析框架的PHP版本添加到环境变量:
4、创建laravel项目
composer create-project laravel/laravel --prefer-dist ./ 当前目录下创建最新laravel项目
composer create-project laravel/laravel shop --prefer-dist 创建一个名为shop的laravel项目
composer create-project laravel/laravel=5.7.* edu --prefer-dist 创建5.7版本中最新小版本号
3、项目启动:
在项目根目录下执行命令:php artisan serve,终端不能关闭
方法二:
使用apache启动,在apache添加虚拟主机:
<VirtualHost _default_:80>
ServerName www.kaor.com
ServerAlias kaor.com
DocumentRoot "F:\kaor\public"
<Directory "F:\kaor\public">
Options -Indexes
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Laravel路由规则
控制器基使用
1、控制器文件在:
2、控制器命令规则:
3、控制器代码结构生成:
php artisan make:controller 控制器名
例如:使用artisan命令创建TestController.php文件。
4、控制器路由:
定义格式如下:
Route::请求方法(路由表达式,控制器@方法)
例如:在Test控制器中创建test方法,其中输出phpinfo信息:
//web.php
Route::get('/home/test/test1','TestController@test1');
//TestController.php
public function test1(){
return phpinfo();
}
5、控制分目录管理:
Facades:门面的意思。门面是介于一个类的实例化与没有实例化中间的一个状态。其实是类的一个接口实现。在这个状态下可以不实例化类当是可以调用类中的方法。
6、获取用户输入:
Input::get('参数的名字','如果参数没有被传递使用该默认值')
Input::all():获取所有的用户的输入
Input::get(''):获取单个的用户的输入
Input::only([]):获取指定几个用户的输入
Input::except([]):获取指定几个用户的输入以外的所以的参数
Input::has('name'):判断某个输入的参数是否存在
DB类操作数据库
1、数据表的创建与配置:
laravel中DB类的基本用法:DB::table('table')获取操作tableName表的实例。
建数据库的方式:
1、sql语句
2、图形界面
//前提app.php文件中有DB这个别名,可以直接use
use DB
2、增加信息:
insert():可以同时添加一条或多条,返回值是布尔类型
insertGetId():只能添加一条数据,返回 自增的id
注意:DB::table('无前缀的表名')
3、修改信息:
Update表示可以修改整个记录中的全部字段;
Increment和decremet表示修改数字字段的数值(递增或者递减),典型的应用:记录登录次数、积分的增加;
->where()->update([])
Where 语法:
->where(字段,运算符,值) 如果运算符为`=`,则第二个参数可以不写
//可加where条件
DB::table('test')->increment('age'); //每次+1
DB::table('test')->increment('age',5); //每次+5
DB::table('test')->decrement('age'); //每次-1
DB::table('test')->decrement('age',5); //每次-5
4、查询数据:
DB::table('test')->get(); //相当于select * from test;
//返回值是一个集合对象
->where->get();
注意:where方法之后继续调用where方法;
-> where() -> where() -> where() //and 关系语法
-> where() -> orWhere() -> orWhere() //or 关系语法
->value() 取出单个指定字段的值
->select('name','email')->get(); 取出多个字段的值
->orderBy('age','desc')->get(); 排序操作:按年龄降序,升序是:asc
->limit(3)->offset(3)->get() 分页操作:limit:表示限制输出的条数 offset:从什么地方开始
5、删除操作:
逻辑删除(本质是修改):用一个字段表示字段不显示,假删除
\\了解,不用
delete() 表示删除记录
truncate() 表示清空整个数据表
6、执行任意的SQL语句(了解):
DB::statement("insert into test values(null,'')");
$res = DB:select("select * from test");
文章评论