前端怎么防止 Session 被劫持?Cookie 设置对了吗?

慕容志利 阅读 16

我最近在做登录功能,后端返回了 Set-Cookie 头,但我担心被 XSS 或中间人攻击偷走 Session。我看文档说要加 HttpOnly 和 Secure,但本地开发用的是 http,加了 Secure 就不存 Cookie 了,这咋办?

现在我的响应头是这样设置的:

Set-Cookie: sessionId=abc123; Path=/; HttpOnly; Secure; SameSite=Lax

是不是本地调试时得临时去掉 Secure?上线 HTTPS 后再加回来?有没有更稳妥的做法?

我来解答 赞 5 收藏
二维码
手机扫码查看
1 条解答
闲人青青
嗯,这个问题挺常见的。Secure 标志确实会导致在 HTTP 协议下 cookie 不会被发送,所以本地调试时去掉 Secure 是个合理的做法。但记得上线到 HTTPS 后一定要加回来,否则 cookie 还是可能被中间人截获。

至于 SameSite,Lax 已经不错了,能防止大部分 CSRF 攻击,但如果你的应用对安全性要求更高,可以考虑设置为 Strict 或 None,并配合 Secure 标志一起用。None 需要和 Secure 一起用,不然浏览器也会忽略它。

本地开发时,你可以通过环境变量或者配置文件来动态设置这些标志,这样上线时不需要手动改代码。比如在 Node.js 中可以用 express-session 来配置:

pre class="pure-highlightjs line-numbers">const session = require('express-session');

app.use(session({
secret: 'your-secret-key',
resave: false,
saveUninitialized: true,
cookie: {
httpOnly: true,
secure: process.env.NODE_ENV === 'production', // 根据环境设置 secure 标志
sameSite: 'lax'
}
}));


这样可以根据不同的环境自动调整 cookie 的设置,性能上也不会有太大影响。
点赞
2026-03-21 11:01