gpt4 book ai didi

asp.net - .NET FormsAuthentication 和持久性 cookie 的密码更改安全漏洞?

转载 作者:行者123 更新时间:2023-12-03 22:33:50 25 4
gpt4 key购买 nike

好的,这是一个场景:

  • Bob 登录到使用 .NET 表单例份验证的 mysite.com,并勾选“记住我”。
  • Eve 偷了 Bob 的笔记本电脑
  • Bob 得到了一台新笔记本电脑,并更改了他的密码。

  • 现在,Eve 有一台被盗的笔记本电脑,上面存储了一个持久性 cookie,这将使她以 Bob 的身份登录 mysite.com - 据我所知,即使在 Bob 更改了他的密码。

    默认情况下,表单例份验证 cookie 不包含 Bob 的密码(无论是明文、散列还是以其他方式加密)-因此 Bob 的密码根本不涉及 cookie 身份验证过程,上周使用的相同用户名仍然有效今天。

    这是一个很容易解决的漏洞 - 通过简单地设置 FormsAuthentication.SetAuthCookie("username:passwordHash") 或其他东西,然后在你的身份验证处理程序中解密和拆分 cookie - 但我很难相信这个问题存在“开箱即用” ......我错过了什么吗?

    编辑 :请注意,我在这里假设“记住我”按钮的目的是让您每次访问网站时都不必输入密码。这适用于 Facebook、Twitter、Gmail 以及我能想到的几乎所有其他网站 - 如果这不是 .NET FormsAuthentication 中“持久性 cookie”选项的目的,我会感到非常惊讶。

    另外,是的,我接受对每个传入请求执行双因素身份验证会产生一定的开销,但实际上它只比根据用户名从数据库中检索用户稍微贵一点,无论如何你可能会这样做.

    编辑 2 :似乎至少有一个主要的 .NET 站点 - CodePlex.com - 容易受到此攻击;见 http://codeplex.codeplex.com/discussions/350646

    最佳答案

    也许只接受在上次密码重置后发出的 FormsAuth 票证是有意义的。

    因此,在 Global.asax AuthenticateRequest 中,从加密票证中提取 FormsAuthenticationTicket.IssueDate,并将其与该用户上次重置密码的日期进行比较(当他们重置密码时,您需要将其存储在您的数据库中)。

    如果票是在该日期之前签发的,则拒绝该票,不要对其进行身份验证并要求他们再次登录。

    我自己还没有实现这个,所以我可能在某个地方遗漏了理论中的一个漏洞......

    关于asp.net - .NET FormsAuthentication 和持久性 cookie 的密码更改安全漏洞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9944053/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com