加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 使用.NET FormsAuthentication和持久性Cookie修改密

发布时间:2020-12-15 23:24:59 所属栏目:asp.Net 来源:网络整理
导读:好的,这是一个场景: Bob登录到mysite.com,它使用.NET表单身份验证,并勾
好的,这是一个场景:

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读