visitor

0xB39D......13E2
07-10
0xB39D......13E2
07-10

Enki用户登录session 的管理

Session 是网页后端用于管理用户登录状态的一种机制,但它会占用一定的服务器内存资源。为减少服务器负担,Enki 登录系统已改为使用 next-iron-session 进行会话管理。

该机制将用户的登录信息通过加密后存储在客户端的 Cookie 中,不再依赖服务端内存维持 session 状态。只要用户不关闭网页,登录状态将持续有效;一旦网页关闭,对应的 session 即失效。

服务端在处理请求时,可从请求头中提取加密的 Cookie,利用预设密钥进行解密,从而还原出明文的用户登录信息,并用于身份验证判断是否已登录

好处:不占用后台资源,无需后台管理。
弊端:登录信息保存在网页的cookie中,容易被冒防登录。

安全处理:

1.中间人攻击(MITM):

在非 HTTPS 下能监听并窃取 cookie。
处理:强制使用 HTTPS,设置 secure: true。

2.跨站脚本(XSS):

若攻击者在页面中注入 JavaScript,就能读取 Cookie。
处理:设置 httpOnly: true,这样 JavaScript 无法访问 Cookie。

3.Cookie 过期控制不当:

如果 session 设置了超长过期时间,攻击者即使拿到旧的 Cookie 也可能有效。
处理:设置合理的过期时间 + 支持登出时清除 Cookie。

4.Cookie 被复制(会话劫持):

如果攻击者获取了 Cookie(如从其他地方拷贝),就能直接模拟登录。这个没法防。

安全处理:
session 信息加入IP地址,浏览器信息,攻击者获取了 Cookie信息后,由于是加密,无法改变其中的 IP地址和浏览器信息,只能整体上传cookie, 后台比对真实请求的IP 地址和解密后session中的ip地址和浏览器信息就可以防此类攻击。

这样处理有一个小bug: 如果使用VPN,当IP更换时,会提示未登录。因此前端在提交申请之前先检测是否登录,如果登录失效,则弹出钱包登录签名窗口。增加了前端的业务逻辑。