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

Laravel 8的CSRF令牌实际是如何保障安全的?

关于Laravel CSRF Cookie防护机制的解答

你不存在配置错误,核心偏差来自对Laravel CSRF实现逻辑、以及相关安全结论适用前提的误解。

  • 首先要明确安全结论的适用边界:仅当服务端把Cookie中自动携带的CSRF令牌作为唯一校验依据时,这种存Cookie的方案才没有防护效果。这种错误实现下,浏览器会自动在跨站请求中附带所有相关Cookie,攻击者不需要知道令牌具体值就能绕过校验,确实和无防护没有区别。
  • Laravel的CSRF实现从来没有把Cookie里自动携带的令牌作为校验依据,它采用的是标准的双提交Cookie优化方案:
    1. 服务端会在响应中下发名为XSRF-TOKEN的Cookie,但这个Cookie是给前端读取使用的,不是给服务端校验用的
    2. 所有非GET的状态变更请求,前端必须主动从当前站点的Cookie中读取XSRF-TOKEN的值,要么放到请求体的_token字段,要么放到X-XSRF-TOKEN请求头中提交
    3. 服务端CSRF中间件校验时,只会读取请求体/请求头中前端主动提交的令牌值,和Session中存储的合法令牌做比对,完全不会采信Cookie中被浏览器自动附带的令牌值
  • 额外下发CSRF Cookie的设计,本质是为了降低前端接入成本:尤其是单页应用场景下,前端不需要额外调用接口获取CSRF令牌,直接读取同源Cookie就能拿到需要提交的令牌值,省掉了单独的令牌下发逻辑。
  • 这套设计的安全逻辑完全成立:受浏览器同源策略限制,跨站场景下的恶意脚本根本无法读取目标站点下的Cookie内容,自然拿不到正确的令牌值,也就没法构造出能通过校验的请求。

你可以自行做两个简单验证就能确认逻辑:

  1. 构造跨站请求,让浏览器自动附带所有相关Cookie,但不在请求体/请求头中主动携带CSRF令牌,请求一定会被CSRF中间件拦截
  2. 手动构造请求,让请求体里提交的令牌值和Cookie中携带的XSRF-TOKEN保持一致,但和Session中存储的合法令牌不匹配,请求同样会被拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:30:50