我阅读了Nancy Forms Authentication的文档。据我所知,那里推荐的方法会导致终身会话ID:
“标识符是将放入身份验证的令牌 cookie将用于重新建立用户的身份 正在执行请求,因此您无需输入您的 每个请求的凭据。“
据我了解,“标识符”是大多数人称之为会话ID的内容。
知道标识符应该被视为是非常重要的 永久为用户生成并将被重用 跨请求和应用程序会话。
这真的是推荐的方法吗?如果我理解正确,这意味着会话ID永远不会改变,永不过期。所以会话ID相当于密码,
我知道我可以以不同的方式与Nancy实现这一点,但我的观点是,这种方法不应该在文档中作为参考进行解释。
因此,如果攻击者成功窃取了该会话ID,例如通过XSS攻击,他可以终身访问系统。
请纠正我,并在我的想法中告诉我错误!
答案 0 :(得分:3)
您所引用的标识符不是会话ID,它是一个不可预测的用户标识符,然后将其映射(如果需要)到后端的真实用户标识符。如果有人以用户X身份登录,并以某种方式设法解密,重新加密和重新签名cookie,他们就不能将用户ID更改为“admin”或类似的东西,并获得管理员访问权限(这是如何ASP.Net Oracle攻击工作)。它也是HttpOnly,所以不能通过XSS真正捕获,虽然从技术上讲它可以使用XST捕获。
创建和过期会话(并在必要时删除auth cookie)完全是另一项任务 - 如何以及何时确定是否应该接受,删除或使用其他密码请求确认身份验证cookie是特定于应用程序的。这是一种常见的模式,现在网站会认为您“永久登录”,直到您执行“安全”操作,在这种情况下,如果您最近没有这样做,它会要求您重新验证。
希望这是有道理的。
答案 1 :(得分:2)
“标识符”是大多数人称之为会话ID的内容。
不是。它就像UserId。正如文件所述:
我们选择使用GUID作为标识符。这样做的原因是使用像id的用户名这样的东西是一个潜在的漏洞,因为如果cookie加密以某种方式被破坏,通过猜测他们的用户名或id很容易欺骗另一个用户的身份。
他们只是使用分配给用户的GUID来提高安全性。当然,(基于cookie)FormsAuthentication具有cookie的所有缺点。如果有人可以访问您的身份验证cookie,他们可以像您一样对自己进行身份验证。但会话cookie和表单身份验证cookie是完全不同的事情,This answer非常清楚地说明了这些差异。