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

为何Laravel Sanctum针对SPA认证仍需使用CSRF令牌?

为什么Laravel Sanctum设置SANCTUM_STATEFUL_DOMAINS后仍需要CSRF令牌?

SANCTUM_STATEFUL_DOMAINS和CSRF防护的作用完全不同,前者是域信任列表,后者是请求合法性验证,二者无法互相替代:

  • SANCTUM_STATEFUL_DOMAINS的核心作用:它仅用于告知Laravel哪些域的请求可以使用会话Cookie完成认证。也就是说,只有列入该列表的域,其发起的请求会被视为来自"可信前端",Laravel会尝试通过Cookie会话验证用户登录态;未列入的域,必须使用Bearer Token等无状态认证方式,Cookie会被直接忽略。

  • CSRF令牌的不可替代性:

    • 即使是信任域内的请求,也存在被恶意诱导的风险。比如用户登录你的SPA(已在状态域列表)后,点击了攻击者伪造的链接或表单,浏览器会自动带上当前会话的Cookie发起请求。如果没有CSRF令牌验证,Laravel会误判这是用户主动发起的合法请求,执行删除数据、提交订单等敏感操作,进而引发CSRF攻击。
    • SANCTUM_STATEFUL_DOMAINS只做域级别的信任判断,无法验证请求是否是用户主动意愿的表达。而CSRF令牌与当前会话绑定,只有前端主动从后端获取并在请求中携带该令牌,后端才会认可请求的合法性,从根源上杜绝了跨站(甚至同域内的恶意诱导)请求伪造的可能。
  • 额外说明:对于无状态请求(未在状态域列表的请求),因为Laravel不会依赖Cookie会话认证,CSRF攻击确实无法生效——攻击者无法通过诱导请求携带有效会话信息,这类场景下不需要CSRF令牌验证。但状态域内的请求依赖Cookie会话,必须配合CSRF令牌才能彻底防范CSRF风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 05:22:14