Nancy 文档中描述的表单身份验证是不是容易受到会话劫持的影响?

Posted

技术标签:

【中文标题】Nancy 文档中描述的表单身份验证是不是容易受到会话劫持的影响?【英文标题】:Is Forms Authentication as described in the Nancy docs susceptible to session hijacking?Nancy 文档中描述的表单身份验证是否容易受到会话劫持的影响? 【发布时间】:2014-02-23 01:41:55 【问题描述】:

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

"标识符是要放入认证的token 用于重新建立用户身份的 cookie 正在执行请求,因此您无需输入您的 每个请求的凭据。”

据我了解,“标识符”就是大多数人所说的会话 ID。

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

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

每次请求都会在 cookie 中重新传输 可能以明文形式存储在数据库中,如果您按照文档进行到底

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

因此,如果攻击者成功窃取了该会话 ID,例如通过 XSS 攻击,他获得了对系统的终身访问权限。

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

【问题讨论】:

还请注意我的后续问题***.com/q/21475731/219187 【参考方案1】:

“标识符”就是大多数人所说的会话 ID。

不是。它类似于 UserId。正如文档所述:

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

他们只是使用分配给用户的 GUID 来提高安全性。当然,(基于 cookie)FormsAuthentication 具有 cookie 的所有缺点。如果有人可以访问您的身份验证 cookie,他们可以将自己验证为您。但是会话 cookie 和表单身份验证 cookie 是完全不同的东西,This answer 非常清楚地说明了差异。

【讨论】:

啊——这与南希无关。这与 ASP.NET 有关,OP 正在询问 Nancy。 @Phill:这就是为什么我不应该在凌晨 1 点之后访问 SO。感谢您的提醒! 尽管该链接是针对 ASP.NET 的,但您为我指出了正确的方向(身份验证 cookie 与会话 cookie),谢谢。 @theDmi:我编辑了帖子并删除了有关会话固定攻击的 ASP.Net 特定内容。但是,您始终可以使用 Firebug 并运行 Nancy.Demo.Authentication.Forms 项目并检查 cookie 来了解有关 Nancy 身份验证 cookie 的更多信息。它会创建一个名为 _ncsa 的加密 cookie。【参考方案2】:

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

创建和终止会话(并在必要时删除身份验证 cookie)完全是一项不同的任务 - 您如何以及何时确定是否应接受、删除或确认身份验证 cookie 并通过额外的密码请求是特定于应用程序的。这是现在的一种常见模式,网站会认为您永远“登录”,直到您执行“安全”操作,在这种情况下,如果您最近没有这样做,它会要求您重新验证。

希望这是有道理的。

【讨论】:

感谢您的澄清,这很有帮助。我现在要再次阅读该文档:-)。所以这意味着真的没有会话ID,对吗?我唯一需要担心的是 auth cookie,我通过 Login()、Logout() 等扩展方法控制它。

以上是关于Nancy 文档中描述的表单身份验证是不是容易受到会话劫持的影响?的主要内容,如果未能解决你的问题,请参考以下文章

Kerberos RC4-HMAC 是不是容易受到成年礼攻击?

为啥基于表单的身份验证不被视为 RESTful?

使用表单身份验证进行模拟

JSON Web 服务是不是容易受到 CSRF 攻击?

基于令牌的身份验证的安全性

JavaScript 正则表单验证(用户名密码确认密码手机号座机号身份证号)