答案:在 Laravel 中跳过 CSRF 验证的方法包括:1. 在 VerifyCsrfToken 中的 $except 添加路径,如 '/api/*';2. 将路由定义在 api.php 使用 API 中间件组;3. 通过 withoutMiddleware 移除特定路由的 CSRF 验证,但不推荐全局关闭。

在 Laravel 中,CSRF(跨站请求伪造)保护默认是开启的,通过中间件 VerifyCsrfToken 实现。但有时我们需要为某些路由关闭或跳过 CSRF 验证,比如开发 API 接口、接收第三方回调等场景。
方法一:将路由添加到 CSRF 白名单(推荐)
最安全的方式是保留大部分路由的 CSRF 保护,仅对特定路由或 URL 路径跳过验证。
打开文件:app/Http/Middleware/VerifyCsrfToken.php
在 $except 数组中添加需要跳过验证的路由路径:
protected $except = ['/api/*',
'/webhook/paypal',
'/admin/payment/callback'
];
注意:这里的路径是相对于域名的 URI,不包含域名本身。支持通配符 *。
方法二:使用 API 中间件组(适用于 API 路由)
Laravel 默认的 API 路由不会启用 CSRF 保护,因为它们使用的是 api 中间件组,而不是 web 中间件组。
确保你的路由定义在 routes/api.php 文件中:
这类路由自动跳过 CSRF 验证,适合无状态的 API 请求。
方法三:自定义中间件或移除 CSRF 中间件(不推荐全局关闭)
不建议直接移除或关闭整个应用的 CSRF 保护,这会带来安全风险。
如果你确实需要为一组特殊路由完全关闭,可以创建一个不包含 CSRF 的中间件组,或者为这些路由单独指定中间件。
例如,在 routes/web.php 中指定某个路由不使用 CSRF:
Route::post('/public/submit', [PublicFormController::class, 'store'])->withoutMiddleware([\App\Http\Middleware\VerifyCsrfToken::class]);注意事项
- 表单提交(尤其是 web 表单)应始终保留 CSRF 保护,防止恶意请求。
- API 接口建议使用 Token 认证(如 Sanctum、Passport),而非依赖 CSRF。
- 测试环境中关闭 CSRF 时,也要确保上线前恢复配置。
基本上就这些。根据实际需求选择合适的方式,优先使用白名单机制,既灵活又安全。











