我有一个asp.net网页表单。当用户进行身份验证时,它会创建一个名为.aspxauth的安全cookie
uppon logout,我调用这两个方法
FormsAuthentication.SignOut();
Session.Abandon()问题是,我们进行了渗透测试,如果我窃取cookie,注销并手动重新插入cookie,我将再次登录。这样.aspauth就不会在服务器端失效。
我已经用谷歌搜索过了,但是我找不到那个安全漏洞的答案。
发布于 2015-07-22 22:27:05
微软已经在这里承认了这个问题:https://support.microsoft.com/en-us/kb/900111
他们提供了几个减轻此漏洞的想法:
中使用成员资格类<代码>G210
关于最后一个,为了方便/保存,我将粘贴站点中的内容:
在ASP.NET 2.0中实现窗体身份验证时,您可以选择将用户信息存储在成员资格提供程序中。此选项是ASP.NET 2.0中引入的新功能。MembershipUser对象包含特定用户。
如果用户已登录,则可以将此信息存储在MembershipUser对象的Comment属性中。如果使用此属性,则可以开发一种机制来减少ASP.NET 2.0中的cookie重播问题。该机制将遵循以下步骤:
重要注释:您必须将指示用户何时显式注销的信息存储在属性中。此外,当客户最终再次登录时,您必须清除Comment属性中的信息。
如果用户当前未按照Comment属性的指示进行登录,则必须执行以下操作:
通过使用此方法,只有当用户尚未显式注销并且窗体身份验证票证尚未过期时,才会接受窗体身份验证cookie。
发布于 2015-07-22 22:21:57
阅读这篇关于会话固定以及如何一劳永逸地摆脱它的文章:
http://www.dotnetfunda.com/articles/show/1395/how-to-avoid-the-session-fixation-vulnerability-in-aspnet
发布于 2020-10-30 01:58:44
这仍然是.NET框架中的一个问题。似乎每个人都认为Session.Abandon()就是答案,但令人遗憾的是,命令并不会使服务器端的会话失效。根据Web.config设置(默认值=20分钟),任何具有正确令牌值的用户仍可以恢复已停止的会话,直到该会话过期。
很久以前,一个类似的提问者在这里提出了这个问题:Session Fixation in ASP.NET
这些链接大部分都失效了,微软在这个话题上没有新的消息。https://forums.asp.net/t/2154458.aspx?Preventing+Cookie+Replay+Attacks+MS+support+article+is+now+a+dead+link
更糟糕的是,即使您正在实现一个完全无状态的MVC应用程序,并且不使用Session对象在视图之间存储数据,您仍然容易受到这种cookie重放攻击。您甚至可以在web.config设置中关闭会话状态,并仍然重播cookies以访问已注销的会话。
真正的解决方案是hack-y和描述的here,您需要让InProc启用会话数据才能使用它。
Session["LoggedIn"] = true;。文件中使用custom filter和registering it globally可能是最简单的方法(这样您就不必在任何地方复制代码,或者在每个global.asax文件中都设置属性
即使攻击者拥有所有的Cookie值,他们也不能重用相同的会话ID,一旦达到指定的超时,服务器将自动删除它。
https://stackoverflow.com/questions/31565632
复制相似问题