You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5+版本CSRF-Token检查方法及自动校验规则咨询

Laravel 5+ 版本CSRF令牌校验规则说明
  • 和Laravel 4.X需要手动在控制器内编写CSRF校验逻辑不同,Laravel 5及以上版本的CSRF校验默认由框架自动完成,常规场景下不需要开发者手动写校验代码。
  • 框架默认把VerifyCsrfToken中间件挂载在全局web路由组下,所有走web路由的POST、PUT、PATCH、DELETE类型请求,中间件会自动抓取请求里携带的CSRF令牌,和当前会话存储的合法令牌做比对,校验不通过会直接返回419状态码错误。
  • Blade模板里的@csrf指令本质就是生成一个name为_token的隐藏表单域,值是当前会话绑定的有效CSRF令牌,普通表单提交时这个字段会随表单数据一起发送,能直接被中间件识别校验。也就是说只要你表单里加了@csrf,正常提交不需要做任何额外处理,校验是自动跑的。
  • 如果你用AJAX发请求,没法直接取表单里的_token字段,可以把CSRF令牌写到页面的meta标签里,发请求的时候把令牌放到X-CSRF-TOKEN请求头中,中间件一样能自动识别完成校验,不用额外写适配逻辑。

特殊场景手动校验方法

如果有特殊业务需求(比如部分路由跳过了全局自动校验、自定义接口需要单独做令牌校验),可以直接在控制器里调用框架封装好的方法做校验,不用自己实现令牌比对逻辑,示例代码如下:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class FormController extends Controller
{
    public function submit(Request $request)
    {
        // 调用框架内置方法校验CSRF令牌有效性
        if (!$request->hasValidToken()) {
            abort(419, 'CSRF令牌校验失败');
        }

        // 往下写正常业务逻辑即可
    }
}

实用配置提示

  • 要是有部分路由不需要做CSRF校验(比如第三方系统调用的webhook回调地址),直接编辑app/Http/Middleware/VerifyCsrfToken.php文件,把需要跳过校验的路由路径加到$except数组里就行,框架会自动跳过这些路由的CSRF校验流程。
  • 非必要不要修改VerifyCsrfToken中间件的核心校验逻辑,避免引入CSRF防护漏洞。

内容的提问来源于stack exchange,提问作者White Orb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 12:30:49