前端设置Cookie时如何防止Session劫持?

慧慧 Dev 阅读 56

我在做登录功能,后端返回了session cookie,但听说如果没设安全属性很容易被XSS偷走。我试过加HttpOnly,但前端又没法读了,现在不知道该怎么平衡安全和功能。

比如我现在登录页的样式是这样:

.login-form {
  max-width: 400px;
  margin: 2rem auto;
  padding: 1.5rem;
  border: 1px solid #ddd;
  border-radius: 8px;
  box-shadow: 0 2px 6px rgba(0,0,0,0.1);
}

关键是cookie到底该由谁设置?前端用document.cookie能安全地处理session吗?

我来解答 赞 16 收藏
二维码
手机扫码查看
2 条解答
轩辕钰浩
Cookie这事儿吧,正确答案是交给后端来设置,别让前端掺和。

你后端设置session的时候,直接把安全属性配上去就行。关键就三个属性:

HttpOnly 必须开,这个是为了防XSS偷cookie。前端根本没必要读session cookie,你后端验证session靠的是请求头带过来的cookie,又不需要前端去读它。所以HttpOnly完全不影响你的正常功能,别纠结这个。

Secure 也得开,确保cookie只在HTTPS下传输。

SameSite 设为Strict或者Lax,防止CSRF攻击。

后端语言不同配置方式不一样,比如PHP的话:

session_set_cookie_params([
'lifetime' => 0,
'path' => '/',
'domain' => '',
'secure' => true,
'httponly' => true,
'samesite' => 'Strict'
]);
session_start();


或者直接在php.ini里配也行。

Node.js用express-session的话:

app.use(session({
secret: 'your-secret',
resave: false,
saveUninitialized: false,
cookie: {
secure: true,
httpOnly: true,
sameSite: 'strict'
}
}));


至于你说前端用document.cookie处理session——这个思路本身就有问题。Session cookie就应该后端全权管理,前端别碰。你需要做的就是在每次请求时自动带上cookie,这个浏览器本身就会做,根本不用你手动处理。

XSS防护方面,除了HttpOnly这种服务端配置,前端能做的就是防止代码注入、过滤用户输入这些基础工作。但只要HttpOnly设好了,就算页面被XSS了,攻击者也偷不走session cookie。

总结就是:Cookie让后端设置,前端别管,也别想着去读它。
点赞
2026-03-11 11:04
程序猿一莹
啊,又是经典的cookie安全问题。说真的,前端用document.cookie设置session简直是在玩火。

首先明确一点:敏感cookie必须由后端设置!包括session id这种性命攸关的东西。前端能做的只是处理一些无关紧要的cookie,比如UI主题偏好这种。

更好的做法是这样:
1. 后端在Set-Cookie响应头里加上HttpOnlySecure(如果是HTTPS),像这样:
Set-Cookie: sessionid=abc123; Path=/; HttpOnly; Secure; SameSite=Strict


2. 前端完全不碰这个cookie,所有身份验证通过HTTP头传递。比如用fetch时可以这样:
fetch('/api/user', {
credentials: 'include' // 自动带上cookie
})


3. 如果你确实需要在前端保存某些状态,可以用localStorage存个非敏感token,但别放session id。

至于你的CSS样式...和这问题没啥关系,不过既然贴出来了,建议把box-shadow改成:
box-shadow: 0 2px 12px rgba(0,0,0,0.08);

这样阴影更柔和些,看着舒服点。
点赞 3
2026-03-05 17:05