关于 laravel:request-forgery-protection
laravel:request-forgery-protection 是用于保护 Laravel 状态变更路由免受跨站请求伪造的安全技能,涵盖 Laravel 13 的来源验证中间件、令牌检查、Webhook 排除及测试。
主要功能
- 01Laravel 13 PreventRequestForgery 用法
- 02令牌与来源验证
- 03限定范围的 Webhook 排除及签名检查
- 04CSRF 测试建议
适用场景
- 01升级 Laravel 13 的防伪造中间件
- 02保护状态变更路由
- 03安全排除第三方 Webhook
- 04测试缺失或无效的 CSRF 令牌
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ jpcaparas/ superpowers-laravel --skill laravel:request-forgery-protection安装后在 Claude Code 中输入/laravel:request-forgery-protection确认已加载。
详细介绍
请求伪造防护
保护会更改状态的路由,避免跨站请求伪造。Laravel 13 将此机制正式命名为 PreventRequestForgery,在基于令牌的 CSRF 防护之上加入了基于来源的验证(Sec-Fetch-Site)。
命令
# Blade forms still emit tokens
<form method="POST" action="/profile">
@csrf
...
</form>
# Laravel 13+: reference the new middleware class
use Illuminate\Foundation\Http\Middleware\PreventRequestForgery; // was: VerifyCsrfToken
->withoutMiddleware([PreventRequestForgery::class]);
# Optional origin-only mode (bootstrap/app.php)
->withMiddleware(function (Middleware $middleware) {
$middleware->preventRequestForgery(originOnly: true);
})
# Exclude webhook URIs from verification
$middleware->validateCsrfTokens(except: ['stripe/*']);
模式
- 在表单中保留
@csrf;来源验证是附加防护,令牌回退机制可兼容旧版浏览器和 HTTP - 仅当所有客户端都是通过 HTTPS 访问的现代浏览器时,才启用
originOnly - 明确排除第三方 webhook 端点,并改为验证其签名
- 升级到 13.x 时,将对
VerifyCsrfToken的引用替换为PreventRequestForgery(旧名称仍作为已弃用别名保留) - 切勿为了“修复”集成故障而全局禁用请求伪造防护——应按 URI 设置排除项
测试
- 默认情况下,功能测试会绕过 CSRF;应为排除的 webhook 路由及其签名检查添加明确的测试
- 在相关情况下,断言缺少或无效令牌时会返回 419 响应
评论
支持 Markdown