使aspx身份validationcookie无效

我有一个asp.net网络表单。 当用户进行身份validation时,它会创建一个名为.aspxauth的安全cookie

uppon logout,我称这两种方法

FormsAuthentication.SignOut(); Session.Abandon() 

问题是我们进行了渗透测试,如果我偷了cookie,注销并手动重新插入cookie,我就会再次进行登录。 所以.aspauth不是服务器端无效的。

我用Google搜索了,我无法找到安全漏洞的答案。

阅读本文关于会话固定以及如何一劳永逸地摆脱它:

http://www.dotnetfunda.com/articles/show/1395/how-to-avoid-the-session-fixation-vulnerability-in-aspnet

Microsoft已在此处确认此问题: https : //support.microsoft.com/en-us/kb/900111

他们提供了一些缓解此漏洞的建议:

  1. 使用SSL保护应用程序
  2. 强制执行TTL和绝对过期
  3. 在ASP.NET 2.0中使用HttpOnly cookie和表单身份validation
  4. 使用ASP.NET 2.0中的Membership类

关于最后一个,为了方便/保存,我会粘贴网站上的内容:

在ASP.NET 2.0中实现表单身份validation时,可以选择将用户信息存储在成员资格提供程序中。 此选项是ASP.NET 2.0中引入的新function。 MembershipUser对象包含特定用户。

如果用户已登录,则可以将此信息存储在MembershipUser对象的Comment属性中。 如果使用此属性,则可以开发一种机制来减少ASP.NET 2.0中的cookie重放问题。 这种机制将遵循以下步骤:

  1. 您创建一个挂钩PostAuthenticateRequest事件的HttpModule。
  2. 如果FormsIdentity对象位于HttpContext.User属性中,则FormsAuthenticationModule类将窗体身份validation票证识别为有效。
  3. 然后,自定义HttpModule类获取对与经过身份validation的用户关联的MembershipUser实例的引用。 您检查Comment属性以确定用户当前是否已登录。

要点 :您必须将信息存储在Comment属性中,该属性指示用户何时明确注销。 此外,当客户最终再次登录时,您必须清除Comment属性中的信息。

如果用户当前未按“注释”属性的指示登录,则必须执行以下操作:

  1. 清除cookie。
  2. 将Response.Status属性设置为401。
  3. 调用Response.End方法,该方法将隐式地将请求重定向到登录页面。

通过使用此方法,仅当用户尚未明确注销并且表单身份validation票证尚未过期时,才会接受表单身份validationcookie。