Double Submit Cookie 防 CSRF 到底怎么实现才安全?
我最近在项目里尝试用 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 才不会被绕过?
程序猿俊宇
Lv1
设置 cookie 时加上 HttpOnly 和 Secure 标志,前端只用 SameSite=Strict 或 Lax 的 cookie 读取 token,防止 XSS 获取,搞定。
点赞
2026-03-23 20:00