前端如何安全地处理多因素认证的第二步验证?

Prog.朝曦 阅读 50

我在做登录流程,第一步密码验证通过后要跳转到 MFA 页面输入验证码。但不确定该不该在前端存用户的临时凭证(比如用 sessionStorage),怕有安全风险。

现在后端返回了一个 temp_token 让我传给第二步验证接口,我直接存在 sessionStorage 里了,但同事说这样容易被 XSS 拿到,那正确的做法应该是什么?

有没有更安全的方式传递这个临时 token?或者是不是根本不该让前端接触这个值?

我来解答 赞 10 收藏
二维码
手机扫码查看
2 条解答
程序员兴敏
temp_token 存在 sessionStorage 确实有 XSS 风险,但这不是最关键的点。

正确做法是让后端通过 Set-Cookie 设置成 HttpOnly 的 cookie,前端根本别碰这个值。第二步验证时浏览器会自动带上 cookie,你只需要调用接口就行,不需要传 token。

如果后端必须让你传 token,那就用完立即删掉,别存。但凡能选 HttpOnly Cookie 就别用前端存储。
点赞
2026-03-13 08:13
ლ宇硕
ლ宇硕 Lv1
别存前端了,直接这样:后端把 temp_token 写进 HttpOnly + Secure + SameSite=Strict 的 cookie 里,前端调第二步接口时浏览器自动带 cookie,前端代码完全不碰这个 token,XSS 也偷不走。

如果后端必须前端传 token,至少用 MemoryStorage(比如一个 JS 变量)存,别用 sessionStorage,等验证完立刻清掉。

// 后端返回 temp_token,前端用内存变量存(别用 localStorage / sessionStorage)
let tempToken = null;

fetch('/api/mfa/verify', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ token: tempToken })
});

// 验证完立刻清掉
tempToken = null;
点赞 2
2026-02-25 12:00