我正在以无cookie的方式管理我的项目中的会话(expressjs),保留所有会话数据服务器端并在客户端使用令牌(先前由服务器生成)以在每个请求上验证会话。
将在用户登录时创建新令牌并保持隐藏在页面中的某个位置,然后,在每个请求中,此令牌将写入请求标头和经过验证的服务器端。此时,服务器将在会话存储中搜索令牌,让我们说redis,如果找到令牌则获取会话数据,否则响应会话过期的消息。
我正在考虑一些事情:
我的问题是如果这可以被视为一种安全的工作方式,并且如果我在这里缺少任何东西。谢谢
答案 0 :(得分:0)
好的,存储会话需要cookie。 Express是理想的方式。
在快递会话(不是 cookiesession )中,它完全存储在服务器上,只有一个密钥被发送到客户端。整个会话被序列化为一个密钥,然后发送。我假设您希望该用户不能篡改会话cookie。您可以使用httponly cookie来防止篡改。它们仅由浏览器处理,用户无法访问。这可以防止cookie被盗或会话劫持。您可以使用以下命令启用httponly cookie:
app.use(express.session({cookie: { path: '/', httpOnly: true}, secret:'password'}));
仍然应该使用一些加密来防止窃听cookie。请使用secure : true
。您还可以使用redis,mongo或简单地在内存中提及要存储会话的位置。
您提到的请求令牌验证是一种常用于防止跨站点请求伪造的技术。它会不断动态更改令牌,以防止用户获取令牌。您可以使用csrf中间件快速使用此功能。
app.use(express.csrf())
IP匹配不起作用,因为用户的IP可能会随着时间的推移而改变。