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,并将其与用户上次重置密码的日期进行比较(当您重置密码时,您需要将其存储在数据库中). 如果机票在该日期之前发出,则拒绝该机票,请勿对其进行验证,并要求他们再次登录. 我没有自己实现,所以我可以在理论的某个地方错过一个洞 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- wcf – OData是否违反了关注点?
- 什么OverrideAuthenticationAttribute是为什么?
- ASP.Net使用DBNULL检查值
- asp.net – 如何映射/ News / 5的路由到我的新闻控制器
- asp.net-web-api – 无法识别Web Api [可查询]属性
- 如何在ASP.NET MVC控制器(ActionResult)中更改返回的Conten
- asp.net-mvc-2 – 如何让HandleErrorAttribute与Ajax一起工
- asp.net – ASPXAUTH cookie未保存
- asp.net-mvc – 填写下拉列表中选择另一个下拉列表
- 文档在线预览的实现
- .net – asp:GridView文本框始终返回空值
- asp.net – 如何绕过糟糕的数据库架构?
- asp.net – 抽象通用ODataController类导致“没有
- asp.net – 使用MVC的Attribute Routing和RouteL
- 具有无限页码的ASP.Net GridView数字分页
- asp.net – 最佳实践 – 从Code-Behind设置jQuer
- ASP.NET Web Api:如何使用URL参数传递访问令牌(
- asp.net – IIS 7如何使用数据库中的用户帐户映射
- 在asp.net中删除字符串变量中的整数值
- asp.net – 在.NET Framework中引用库而不是.NET