asp.net – 使用.NET FormsAuthentication和持久性Cookie修改密码的安全漏洞?

前端之家收集整理的这篇文章主要介绍了asp.net – 使用.NET FormsAuthentication和持久性Cookie修改密码的安全漏洞?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
好的,这是一个场景:

> Bob登录到mysite.com,它使用.NET表单身份验证,并勾选“记住我”.
夏娃窃取鲍勃的笔记本电脑
鲍勃得到一台新的笔记本电脑,并更改了他的密码.

现在在这个时候,夏娃有一个被盗的笔记本电脑,它有一个永久性的cookie存储在它,将登录到mysite.com作为鲍勃 – 据我所知,这将工作,即使鲍勃改变了他密码.

默认情况下,表单认证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,并将其与用户上次重置密码的日期进行比较(当您重置密码时,您需要将其存储在数据库中).

如果机票在该日期之前发出,则拒绝该机票,请勿对其进行验证,并要求他们再次登录.

我没有自己实现,所以我可以在理论的某个地方错过一个洞

原文链接:https://www.f2er.com/aspnet/250332.html

猜你在找的asp.Net相关文章