You need to enable JavaScript to run this app. 为何将Refresh Token存于HTTP Only Cookie可防CSRF攻击?是否仍存风险?
优惠活动
大模型
产品
解决方案
定价
更多

为何将Refresh Token存于HTTP Only Cookie可防CSRF攻击?是否仍存风险?

关于Refresh Token存储在HTTP-Only Cookie的CSRF风险疑问解答

你的理解完全正确

HTTP-Only Cookie的核心特性就是禁止前端JavaScript读取,但是只要请求的目标域名、路径、Secure属性等匹配Cookie规则,不管是本站还是第三方站点发起的请求,浏览器都会自动携带对应的Cookie。所以如果/refreshtoken端点没有额外防护,恶意站点确实可以发起跨站请求,自动带上Refresh Token拿到新的Access Token,这属于标准的CSRF攻击场景。

原文表述的实际含义

但通过Refresh Token间接持久化会话,我们可以避免使用JWT令牌时直接存在的CSRF漏洞

这句话的对比对象是「把JWT Access Token也存储在Cookie里」的方案:如果Access Token存在Cookie中,所有业务请求(比如GraphQL的查询、变更接口)都会自动携带Cookie,意味着所有业务接口都需要做CSRF防护,风险覆盖范围极广。

而按照文中的方案,Access Token存储在内存中,请求时放到Authorization请求头里传递,第三方站点完全无法拿到内存中的Access Token,所以所有业务接口都不存在CSRF风险,只有/refreshtoken这一个端点需要处理CSRF问题,风险面被压缩到极小,所以原文表述为「避免直接存在的CSRF漏洞」,并非指完全消除CSRF可能性。

针对/refreshtoken端点的CSRF防护方案

  • 给Refresh Token对应的Cookie增加SameSite=Lax或SameSite=Strict属性,现在主流浏览器都支持该属性,跨站发起的请求不会携带对应Cookie,从根源上阻断攻击
  • 如需兼容不支持SameSite属性的旧浏览器,可以要求/refreshtoken请求额外携带CSRF Token,该Token可以存储在LocalStorage或者非HTTP-Only的Cookie中,请求时放到自定义头或者请求体中,第三方站点无法读取到该Token,即使自动携带了Refresh Cookie也无法完成请求
  • 接口层增加Origin/Referer校验,只允许信任的域名发起刷新Token的请求

内容的提问来源于stack exchange,提问作者Shalahuddin Al-Ayyubbi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 14:24:00