【发布时间】:2013-10-18 02:39:37
【问题描述】:
我正在以无 cookie 的方式管理我的项目 (expressjs) 中的会话,保留所有会话数据服务器端并在客户端使用令牌(之前由服务器生成)来验证每个请求的会话.
将在用户登录时创建一个新令牌并隐藏在页面中的某个位置,然后,在每次请求时,该令牌将被写入请求标头并经过验证的服务器端。此时服务器将在会话存储中搜索令牌,比方说 redis,如果找到令牌则获取会话数据,否则响应会话过期消息。
为此我正在考虑一些事情:
- Redis 密钥是在用户登录时创建的,具有确定的过期时间。
- 每次在 redis 中找到会话数据时,我都必须“触摸”键 所以过期时间会被推迟。
- 令牌将与客户端的 IP 地址一起验证,因此不能被其他人使用。
我的问题是这是否可以被认为是一种安全的工作方式,以及我在这里是否缺少任何东西。谢谢
【问题讨论】:
-
您所做的与使用带有 redis 会话存储的 cookie 几乎相同,只是您使用的是自定义标头而不是 cookie 标头。所以是的,这同样安全。
-
定义“隐藏在页面的某处”。此外,听起来您正在尝试重新发明会话 cookie,另外一个缺点是您的浏览器可能对 cookie 采取的任何安全措施都被规避了。
-
我的意思是把输入隐藏在某个地方,嗯,你说得对,但是浏览器可能采取的哪些安全措施可能会影响我的方法?考虑到我没有做奇怪的事情,比如从一个域转到另一个域
-
@RenzoCortez cookie 可以归类为
httpOnly,这意味着它们无法被 JS 读取(因此,XSS 攻击)。隐藏的输入没有得到类似的保护。