前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >laravel中csrf验证详解

laravel中csrf验证详解

作者头像
章鱼喵
发布2019-05-14 10:10:35
2.1K0
发布2019-05-14 10:10:35
举报
文章被收录于专栏:codingcoding

laravel默认开启了csrf验证,当form表单提交数据时须带上csrf的token值,校验不通过就返回419错误

csrf验证演示

接下来用代码演示验证流程,首先,在 routes/app.php 中定义路由:

代码语言:javascript
复制
Route::get('form', 'CsrfController@form')->name('csrf.form');
Route::post('post', 'CsrfController@post')->name('csrf.post');

接着创建控制器:

代码语言:javascript
复制
$ php artisan make:controller CsrfController

app/Http/Controllers/CsrfController.php 创建两个方法,一个显示表单,一个提交表单

代码语言:javascript
复制
# ...
class CsrfController extends Controller
{
    public function form()
    {
        return view('csrf.form');
    }

    public function post(Request $request)
    {
        dd($request->post());
    }
}

用bootstrap创建表单视图:resources/views/csrf/form.blade.php

代码语言:javascript
复制
<div class="container mt-5">
    <form method="post" action="{{ route('csrf.post') }}">
        <div class="form-group">
            <label for="name">用户名</label>
            <input type="text" class="form-control" name="name" id="name" placeholder="输入用户名">
        </div>
        <div class="form-group">
            <label for="pwd">密码</label>
            <input type="password" class="form-control" name="password" id="pwd" placeholder="输入密码">
        </div>
        <button type="submit" class="btn btn-primary">提交</button>
    </form>
</div>

提交表单,会报419错误:

image

这是因为表单没有携带csrf验证所需要的token,修改form表单:

代码语言:javascript
复制
<form method="post" action="{{ route('csrf.post') }}">
    @csrf
    <!-- ... -->
</form>

刷新页面,可看到@csrf解析为以下代码:

image

再次提交表单,便可打印出表单数据:

image

忽略csrf验证

当我们与第三方接口交互时,不可能让第三方接口从我们的服务器获取token,此时csrf就会误伤友军。因此,我们有时需要将csrf验证取消

csrf验证是一个独立的中间件,如果我们在app/Http/Kernel.php$middlewareGroups将其屏蔽,就不会再对任何请求进行csrf验证,这种方法自然是不可取的

image

我们只需要在app/Http/Middleware/VerifyCsrfToken.php中间件的$except属性中添加要过滤的路由,即可使这些路由跳过验证

代码语言:javascript
复制
protected $except = [
    '/post'
];

此时将form表单中的@csrf删除,再提交表单,并不会触发419错误

image

源码库

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.05.13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • csrf验证演示
  • 忽略csrf验证
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档