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

Node.js CSURF模块ANTI-CSRF令牌计算机制及运行行为疑问

关于CSURF模块令牌生成逻辑与运行行为的解答

运行行为是否符合设计

你观察到的Cookie中_csrf值固定、每次请求返回的csrfToken动态变化的行为,完全是CSURF模块的默认正常设计。

ANTI-CSRF令牌的具体计算逻辑

CSURF采用加盐哈希的机制生成校验令牌,核心逻辑如下:

  • Cookie中存储的_csrf是全局密钥(secret),在Cookie有效期内会保持固定不变,不会随每次请求刷新
  • 调用req.csrfToken()生成返回给前端的令牌时,每次都会生成新的随机盐值,将盐值和_csrf密钥组合后做哈希运算,最终返回的令牌是「盐值+哈希结果」的拼接字符串
  • 校验阶段,CSURF会从用户提交的令牌中拆分出盐值,用相同的算法和Cookie中存储的_csrf密钥重新计算哈希,和提交令牌中的哈希部分做比对,一致则校验通过
    这也是为什么Cookie中的_csrf和返回的csrfToken值不一致、且每次返回的csrfToken都不同,但全部都能通过校验的原因。

历史令牌可用的安全性说明

你担心的「任意生成过的令牌都能绕过校验」的问题不存在实际安全风险:
CSRF攻击的核心前提是攻击者无法获取用户浏览器中同域下的Cookie内容,也无法读取目标站点返回给用户的页面/接口内容。哪怕历史令牌长期有效,攻击者也无法拿到任何和当前用户_csrf密钥匹配的有效令牌,不会对安全造成影响。
如果业务需要限制令牌的有效期或实现单次有效,可以将CSURF的存储模式切换为session存储,或自行扩展逻辑给令牌增加有效期校验即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:36:06