用户
搜索
  • TA的每日心情
    开心
    2018-9-11 11:32
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]经常看看I

    i春秋-核心白帽

    Rank: 4

    123

    主题

    151

    帖子

    1668

    魔法币
    收听
    0
    粉丝
    37
    注册时间
    2016-6-6
    发表于 2020-1-9 09:37:05 25055


    title: Laravel 框架使用篇
    tags: PHP,框架,Laravel
    grammar_cjkRuby: true

    当你分析一个WEB框架的漏洞时先要简单了解下WEB框架的使用与结构,下面是斗哥带来Laravel框架使用与后期Laravel框架漏洞分析

    一、Laravel简介

    1、简介:

    Laravel 是一套简洁,优雅的PHPWeb开发框架具有富于表达性且简洁的语法;
    Laravel是易于理解且强大的,它提供了强大的工具用于以开发大型,健壮的应用;
    具有验证、路由、Session、缓存、数据库迁移工具、单元测试等常用的工具和功能。
    目前大部分的框架公共的特点:
    1、单入口,所有的请求必须从单入口开始,主要是便于管理(统一的参数过滤)
    2、MVC的思想(分层思想,主要是为了协同开发,实现后期的维护方便)
    3、ORM操作数据库(Object Relations Model)
    注意:Laravel框架有一个特点,所有的URL访问都必须事先定好路由规则

    2、创建Laravel项目:

    composer是PHP中用来管理依赖关系的工具,是为PHP项目准备的软件管家。我们用它来创建Laravel项目:
    enter description here
    步骤:
    1、将要解析框架的PHP版本添加到环境变量:
    enter description here
    2、安装composer,安装完成后,进入cmd,运行composer,如下安装成功:
    enter description here
    3、更新镜像源composer镜像源
    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路由规则

    Route::get('/users', 'admin\ForController@FunctionName');

    三、控制器基使用

    1、控制器文件在:

    app/Http/Controllers

    2、控制器命令规则:

    大驼峰控制器名+Controller.php

    3、控制器代码结构生成:
    php artisan make:controller 控制器名

    例如:使用artisan命令创建TestController.php文件。
    命令:#php artisan make:controller TestController

    4、控制器路由:

    路由设置格式基本相同,只是将匿名函数换成控制器类名@方法名
    定义格式如下:
    Route::请求方法(路由表达式,控制器@方法)
    例如:在Test控制器中创建test方法,其中输出phpinfo信息:

    //web.php
    Route::get('/home/test/test1','TestController@test1');
    //TestController.php
    public function test1(){
            return phpinfo();
    }
    5、控制分目录管理:

    接收用户输入的类:Facades\Input
    Facades:门面的意思。门面是介于一个类的实例化与没有实例化中间的一个状态。其实是类的一个接口实现。在这个状态下可以不实例化类当是可以调用类中的方法。
    enter description here

    6、获取用户输入:
    Input::get('参数的名字','如果参数没有被传递使用该默认值')
    Input::all():获取所有的用户的输入
    Input::get(''):获取单个的用户的输入
    Input::only([]):获取指定几个用户的输入
    Input::except([]):获取指定几个用户的输入以外的所以的参数
    Input::has('name'):判断某个输入的参数是否存在

    四、DB类操作数据库

    1、数据表的创建与配置:

    按照MVC的架构,对数据的操作应该放在Model中完成,但如果不使用Model,我么也可以用laravel框架提供的DB类操作数据库。而且,对于某些极其复杂的sql,用Mode已经很难完成,需要开发者自己手写sql语句,使用DB类去执行原生sql。
    laravel中DB类的基本用法:DB::table('table')获取操作tableName表的实例。

    建立数据库:

    建数据库的方式:
    1、sql语句
    2、图形界面

    .env文件
    enter description here
    也可以在config目录下面的database.php文件里面配置,使用env函数,表示先从env文件里面获取,如果获取成功则使用,如果获取失败,则使用env函数的第二个参数。
    enter description here
    控制器要引入DB的门面才能数据库操作:

    //前提app.php文件中有DB这个别名,可以直接use
    use DB
    2、增加信息:

    对数据库中的某个表增加数据主要有两个函数可以实现,分别是insert()insertGetId()
    insert():可以同时添加一条或多条,返回值是布尔类型
    insertGetId():只能添加一条数据,返回 自增的id
    注意:DB::table('无前缀的表名')

    3、修改信息:

    数据修改可以使用update()increment()decrement()函数来实现。
    Update表示可以修改整个记录中的全部字段;
    Increment和decremet表示修改数字字段的数值(递增或者递减),典型的应用:记录登录次数、积分的增加;

    案例:把name=王大骚的名称,改名为‘王大少’
    ->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、查询数据:

    eg:获取test表中所有的数据

    DB::table('test')->get();  //相当于select * from test;
    //返回值是一个集合对象

    eg:获取id>3的数据
    ->where->get();

    注意:where方法之后继续调用where方法;
    -> where() -> where() -> where() //and 关系语法
    -> where() -> orWhere() -> orWhere() //or 关系语法

    ->first() 取第一行记录,返回值是一个对象
    ->value() 取出单个指定字段的值
    ->select('name','email')->get(); 取出多个字段的值
    ->orderBy('age','desc')->get(); 排序操作:按年龄降序,升序是:asc
    ->limit(3)->offset(3)->get()        分页操作:limit:表示限制输出的条数 offset:从什么地方开始

    5、删除操作:

    在删除中,有两种方式:物理删除(本质就是删除)、逻辑删除(本质是修改)
    逻辑删除(本质是修改):用一个字段表示字段不显示,假删除

    \\了解,不用
    delete() 表示删除记录
    truncate() 表示清空整个数据表
    6、执行任意的SQL语句(了解):

    (1):执行任意的insert update delete语句【影响记录的语句使用statement语法】
    DB::statement("insert into test values(null,'')");

    (2):执行任意的select语句【不影响记录的语句使用select语法】
    $res = DB:select("select * from test");

    7、小小总结:
    有个大佬说过:做web安全要不你就没日没夜的挖洞,要不你就要比开发更懂WEB开发。而现在我们正在了解WEB的路上,学习完Laravel框架,下期我们将带来Laravel框架在开发中存在漏洞。
    发表于 2020-1-10 11:35:55
    让我们一起干大事!
    有兴趣的表哥加村长QQ:780876774!
    使用道具 举报 回复
    发表于 2020-1-10 21:53:26
    不明觉厉
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册