• Laravel 框架资源嵌套.浅嵌套.自定义&表单伪造.CSRF 保护 ④


    ![请添加图片描述](https://img-blog.csdnimg.cn/154d035aa4db42df99f3b01fbf287e46.gif#pic_center)
    
    • 1

    @作者 : SYFStrive

     
    请添加图片描述

    @博客首页 : HomePage

    📜: THINK PHP

    📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗

    📌:觉得文章不错可以点点关注 👉:专栏连接🔗


    请添加图片描述
    相关专栏

    👉 VUEJS(🔥)
    👉 MYSQL(🔥)
    👉 微信小程序(🔥)
    👉 PHPMYSQL(🔥)
    👉 UNIAPP开发(🔥)


                        ⡖⠒⠒⠒⠤⢄⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸   ⠀⠀⠀⡼⠀⠀⠀⠀ ⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢶⣲⡴⣗⣲⡦⢤⡏⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠋⠉⠉⠓⠛⠿⢷⣶⣦⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠇⠀⠀⠀⠀⠀⠀⠘⡇⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡞⠀⠀⠀⠀⠀⠀⠀⢰⠇⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⡴⠊⠉⠳⡄⠀⢀⣀⣀⡀⠀⣸⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠰⠆⣿⡞⠉⠀⠀⠉⠲⡏⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠈⢧⡀⣀⡴⠛⡇⠀⠈⠃⠀⠀⡗⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣱⠃⡴⠙⠢⠤⣀⠤⡾⠁⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⢀⡇⣇⡼⠁⠀⠀⠀⠀⢰⠃⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⣸⢠⣉⣀⡴⠙⠀⠀⠀⣼⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⡏⠀⠈⠁⠀⠀⠀⠀⢀⡇⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠀⠀⠀⠀⠀⠀⡼⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⣰⠃⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⣀⠤⠚⣶⡀⢠⠄⡰⠃⣠⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⢀⣠⠔⣋⣷⣠⡞⠀⠉⠙⠛⠋⢩⡀⠈⠳⣄⠀⠀⠀⠀⠀⠀⠀
    ⠀⡏⢴⠋⠁⠀⣸⠁⠀⠀⠀⠀⠀ ⠀⣹⢦⣶⡛⠳⣄⠀⠀⠀⠀⠀
    ⠀⠙⣌⠳⣄⠀⡇   不能   ⡏⠀⠀  ⠈⠳⡌⣦⠀⠀⠀⠀
    ⠀⠀⠈⢳⣈⣻⡇   白嫖 ⢰⣇⣀⡠⠴⢊⡡⠋⠀⠀⠀⠀
    ⠀⠀⠀⠀⠳⢿⡇⠀⠀⠀⠀⠀⠀⢸⣻⣶⡶⠊⠁⠀⠀
    ⠀⠀⠀⠀⠀⢠⠟⠙⠓⠒⠒⠒⠒⢾⡛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⣠⠏⠀⣸⠏⠉⠉⠳⣄⠀⠙⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⡰⠃⠀⡴⠃⠀⠀⠀⠀⠈⢦⡀⠈⠳⡄⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⣸⠳⣤⠎⠀⠀⠀⠀⠀⠀⠀⠀⠙⢄⡤⢯⡀⠀⠀⠀⠀⠀⠀
    ⠀⠐⡇⠸⡅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⡆⢳⠀⠀⠀⠀⠀⠀
    ⠀⠀⠹⡄⠹⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣇⠸⡆⠀⠀⠀⠀⠀
    ⠀⠀⠀⠹⡄⢳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⡀⣧⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⢹⡤⠳⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣷⠚⣆⠀⠀⠀⠀
    ⠀⠀⠀⡠⠊⠉⠉⢹⡀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡎⠉⠀⠙⢦⡀⠀
    ⠀⠀⠾⠤⠤⠶⠒⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠒⠲⠤⠽   
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    提示:以下是本篇文章正文内容

    PHP LARAVEL 简介

    • Laravel是一种流行的开源PHP Web应用程序框架,由Taylor Otwell在2011年创建并发布。它提供了一个简洁优雅的语法和丰富的功能集,旨在使Web开发过程更快速、简单和愉悦。
    1. MVC架构模式:Laravel采用了MVC(Model-View-Controller)架构模,将应用程序的逻辑分为不同的层,提高了代码的可维护性和可测试性。

    2. 简洁的语法和表达力:Laravel框架支持具有简洁而表达力的语法,使得编写清晰、易读、易维护的代码成为可能。

    3. 路由系统:它提供了一个强大且灵活的路由系统,通过简单的配置和代码即可定义Web应用程序的路由规则,实现URL到控制器的映射。

    4. 数据库抽象层:Laravel提供了一个简便的数据库抽象层,支持多种数据库系统,并通过Eloquent ORM提供了一种优雅的方法来与数据库进行交互。

    5. 权限和认证系统:Laravel提供了内置的身份验证和授权功能,使得实现用户身份验证、访问控制和权限管理变得简单和便捷。

    6. 缓存系统:Laravel支持多种缓存后端,包括文件、数据库、Memcached和Redis等,让你可以轻松地实现缓存数据,提升应用程序的性能。

    7. 强大的扩展性:Laravel通过Composer和Packagist等工具提供了丰富的扩展包生态系统,可以快速集成各种功能组件和第三方库,加快开发进程。

    8. 测试支持:Laravel鼓励编写和运行测试,提供了一套丰富的测试工具和断言,帮助开发者确保代码的质量和可靠性。

    • 总的来说,Laravel框架以其易用性、优雅的语法、丰富的功能和强大的扩展性受到了广大开发者的喜爱。它提供了

    PHP LARAVEL 资源嵌套 和 浅嵌套 和 自定义

       资源嵌套

    1. 嵌套资源路;

    php artisan make:controller CommentController --resource

    //嵌套资源路由

    Route::resource('blogs.comments', 'CommentController');

    嵌套路由 👇

    在这里插入图片描述

    1. 可以通过嵌套资源路由来实现这个功能,编辑方法以及传参如下:
    public function edit($blog_id, $comment_id)
    {
    	return '编辑博文下的评论,博文 id:'.$blog_id.',评论 id:'.$comment_id;
    }
    
    • 1
    • 2
    • 3
    • 4
    //嵌套资源路由
    Route::resource('blogs.comments', Controllers\CommentController::class)->shallow()
        ->name('index','b.c.i')
        ->parameter('blogs','id');
    
    • 1
    • 2
    • 3
    • 4
    1. 为了优化资源嵌套,通过路由方法→shallow()实现浅层嵌套方法;

    浅层嵌套 👉 Route::resource('blogs.comments', 'CommentController')->shallow();

    1. 实现后的路由,在传递参数方法也比较精准,具体如下
      在这里插入图片描述
    public function edit($id)
    {
    	return '评论 id.'.$id;
    }
    
    • 1
    • 2
    • 3
    • 4
    1. 如果觉得资源路由命名过长,可以自己自定义,有两种方式
    ->name('index', 'b.c.i');
    ->names([
    	'index' => 'b.c.i'
    ]);
    
    • 1
    • 2
    • 3
    • 4
    1. 如果觉得资源路由的参数不符合你的心意,也可以改变
    ->parameter('blogs', 'id');
    ->parameters([
    	'blogs' => 'blog_id',
    	'comments' => 'comment_id'
    ]);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    PHP LARAVEL 表单伪造 和 CSRF

    1. 表单可以实现 POST 方式,我们来实验 👇
    2. 先在 FormController 创建两个方法,一个表单页,一个接受表单数据路由;
    public function form()
    {
    	return view('form');
    }
    //接受表单数据
    Route::any('/task/getForm', [Controllers\FormController::class, 'getForm']);
    Route::any('/task/getFormApi', [Controllers\FormController::class, 'getFormApi']);
    
    public function getForm()
    {
        return \Illuminate\Support\Facades\Request::method();
    }
    
    public function getFormApi()
    {
        return \Illuminate\Support\Facades\Request::method();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    1. 表单页以 post 发送,路由也使用 post 接受,以下表单提交会出现 419 错误;
    <form action="/task/getform" method="post">
    	用户名:<input type="text" name="user">
    	<button type="submit">提交</button>
    </form>
    
    • 1
    • 2
    • 3
    • 4
    1. 这是为了避免被跨站请求伪造攻击,框架提供了 CSRF 令牌保护,请求时验证;
    2. 表单可以实现 POST 提交方式,那其它提交方式该如何实现呢?可以采用伪造技术;
    3. 对于 CSRF 令牌 保护和表单伪造提交方式,也支持快捷方式的声明,如下 👇
    <input type="hidden" name="_token" value="{{csrf_token()}}">
    <input type="hidden" name="_method" value="get">
    @csrf
    @method('PUT')
    
    • 1
    • 2
    • 3
    • 4
    1. 如果我们想让某些 URL 关闭 csrf 验证,可以设置 csrf 白名单;
    2. 白名单具体设置位置在:中间件目录下的 VerifyCsrfToken.php 文件;
    3. 当然,不建议直接注释掉这个验证 csrf 功能的中间件;
    protected $except = [
    //
    'api/*',
    ];
    
    • 1
    • 2
    • 3
    • 4

    最后

    以上是个人学习 THINKPHP 的相关知识点,一点一滴的记录了下来,有问题请评论区指正,共同进步,这才是我写文章的原因之,如果这篇文章对您有帮助请三连支持一波

  • 相关阅读:
    基于Python的微博舆论分析,微博情感分析可视化系统(V2.0)
    2022-08-26 Unity视频播放1——视频介绍
    echarts vue里画一个简单的环状饼图
    【Vue 开发实战】基础篇 # 4:Vue组件的核心概念:插槽
    Java多线程(4):ThreadLocal
    数据库基本概述与SQL概述
    【Spring Boot】如何在Linux系统中快速启动Spring Boot的jar包
    Netty面试题(二)
    下载安装nvm,使用nvm管理node.js版本
    2023年“绿盟杯”四川省大学生信息安全技术大赛
  • 原文地址:https://blog.csdn.net/m0_61490399/article/details/131873087