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

为何跨域场景下同时使用JWT与CSRF Token存储于Cookie?

JWT与CSRF Token共存于Cookie的作用及安全价值解析

一、同时存储在Cookie中的核心作用

当JWT存放在Cookie且SameSite=None时,浏览器会在跨域请求时自动携带该Cookie,但JWT本身无法区分请求是用户主动发起的,还是恶意网站通过CSRF伪造的。CSRF Token的核心作用是验证请求的发起者是合法前端页面:它需要前端从合法页面(比如后端接口返回、页面渲染注入)获取后,放在请求头或请求体中一同发送,后端同时校验Cookie里的JWT和请求中的CSRF Token是否匹配。

简单来说:JWT负责确认“你是谁”,CSRF Token负责确认“这个请求是你本人在合法页面发起的”。

二、仅用JWT是否足够保障安全?

绝对不够,核心问题在于CSRF攻击场景:

  • 若用户已登录,Cookie中存储了SameSite=None的JWT,当用户访问恶意网站时,恶意网站可构造指向你后端的操作请求(比如转账、修改个人信息),浏览器会自动带上JWT Cookie。
  • 此时后端仅校验JWT合法性,会误判为合法用户的请求并执行操作——这就是CSRF攻击的本质:利用浏览器自动携带Cookie的特性,伪造用户的合法请求。

你提到的“窃取令牌或重放攻击”属于XSS、MITM这类风险范畴,需要通过HTTPS、HttpOnly标记、令牌过期策略等手段防范,但CSRF Token解决的是无需窃取令牌就能发起攻击的场景,二者防护的是不同类型的安全风险,不能混为一谈。

三、CSRF Token是不是多余的开销?

你的理解存在偏差,关键在于:CSRF Token不会被浏览器自动携带,攻击者无法通过CSRF攻击获取合法前端页面中的CSRF Token:

  • 当用户受骗点击恶意链接时,恶意网站只能触发浏览器发送带JWT Cookie的请求,但由于跨域限制,恶意网站的JS无法读取你前端页面的DOM或接口返回的CSRF Token。
  • 因此恶意构造的请求中没有正确的CSRF Token,后端校验不通过,就能拦截这次CSRF攻击。

你所说的“二者均可能被劫持”,只有在存在XSS漏洞的情况下才会发生,但XSS是另一种安全风险,需要用HttpOnly、Content-Security-Policy等手段防范,CSRF Token并非用于抵御XSS,不能因为XSS能绕过就否定它的核心价值。

总结

JWT和CSRF Token是互补的安全机制:

  • JWT用于身份认证,确认请求发起者的身份合法性;
  • CSRF Token用于防止跨域请求伪造,确认请求是合法前端发起的,而非恶意网站诱导的;
  • 当SameSite=None时,浏览器会跨域携带Cookie,此时CSRF Token的作用尤为关键,是抵御CSRF攻击的核心手段之一,绝非多余开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 01:20:05