Double Submit Cookie 防 CSRF 到底怎么实现才安全?

Dev · 玉淇 阅读 4

我最近在项目里尝试用 Double Submit Cookie 方案防 CSRF,后端把 token 放在 Set-Cookie 里,前端再从 cookie 读出来塞到请求头。但我不确定这样是不是真的安全——因为 JS 能读 cookie 的话,不就可能被 XSS 拿走?而且我试了下,如果 cookie 没设 HttpOnly,document.cookie 确实能拿到值。

另外,我现在的做法是这样:

const csrfToken = document.cookie
  .split('; ')
  .find(row => row.startsWith('csrf_token='))
  ?.split('=')[1];

fetch('/api/transfer', {
  method: 'POST',
  headers: {
    'X-CSRF-Token': csrfToken
  },
  credentials: 'include'
});

但同事说这样有风险,可我又看到很多教程都这么写……到底该怎么正确实现 Double Submit Cookie 才不会被绕过?

我来解答 赞 2 收藏
二维码
手机扫码查看
1 条解答
程序猿俊宇
设置 cookie 时加上 HttpOnly 和 Secure 标志,前端只用 SameSite=Strict 或 Lax 的 cookie 读取 token,防止 XSS 获取,搞定。
点赞
2026-03-23 20:00