> 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
解决方法
所以在Global.asax AuthenticateRequest中,从加密的票证中提取FormsAuthenticationTicket.IssueDate,并将其与用户上次重置密码的日期进行比较(当您重置密码时,您需要将其存储在数据库中).
如果机票在该日期之前发出,则拒绝该机票,请勿对其进行验证,并要求他们再次登录.
我没有自己实现,所以我可以在理论的某个地方错过一个洞
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。