南希文档中描述的表单身份validation是否容易受到会话劫持的影响?

我阅读了Nancy Forms Authentication的文档。 据我所知,那里推荐的方法会导致终身会话ID:

“标识符是将放入身份validationcookie的令牌,用于重新建立执行请求的用户的身份,因此您无需为每个请求输入凭据。”

据我所知,“标识符”是大多数人称之为会话ID的内容。

同样重要的是要知道标识符应被视为为其生成的用户的永久标识符,并将在请求和应用程序会话中重用。

这真的是推荐的方法吗? 如果我理解正确,这意味着会话ID永远不会改变,永远不会过期。 因此会话ID相当于密码

  • 每次请求都会在cookie中重新传输
  • 如果您按照文档结束,可能会以明文forms存储在数据库中

我知道我可以与南希不同实现这一点,但我的观点是,这种方法不应该在文档中作为参考来解释。

因此,如果攻击者成功窃取了该会话ID,例如通过XSS攻击,他就可以终身访问系统。

请纠正我,并告诉我我的想法中的错误!

您引用的标识符不是会话ID,它是一个不可预测的用户标识符,然后将其映射(如果需要)到后端的真实用户标识符。 如果有人以用户X身份登录,并以某种方式设法解密,重新加密和重新签名cookie,他们就不能将用户ID更改为“admin”或类似的东西,并获得管理员访问权限(这是如何ASP.Net Oracle攻击工作)。 它也是HttpOnly,所以不能通过XSS真正捕获,虽然从技术上讲它可以使用XST捕获。

创建和过期会话(并在必要时删除auth cookie)完全是另一项任务 – 如何以及何时确定是否应该接受,删除或使用其他密码请求确认身份validationcookie是特定于应用程序的。 这是一种常见模式,现在网站会认为您“永久登录”,直到您执行“安全”操作,在这种情况下,如果您最近没有这样做,它会要求您重新validation。

希望有道理。

“标识符”是大多数人称之为会话ID的内容。

不是。 它就像UserId。 正如文件所述:

我们选择使用GUID作为标识符。 这样做的原因是使用像id的用户名这样的东西是一个潜在的漏洞,因为,如果cookie加密以某种方式被破坏,通过猜测他们的用户名或id很容易欺骗另一个用户的身份。

他们只是使用分配给用户的GUID来提高安全性。 当然,(基于cookie)FormsAuthentication具有cookie的所有缺点。 如果有人可以访问您的身份validationcookie,他们可以像您一样对自己进行身份validation。 但会话cookie和表单身份validationcookie是完全不同的东西, 这个答案非常清楚地说明了差异。