使aspx身份validationcookie无效
我有一个asp.net网络表单。 当用户进行身份validation时,它会创建一个名为.aspxauth的安全cookie
uppon logout,我称这两种方法
FormsAuthentication.SignOut(); Session.Abandon()
问题是我们进行了渗透测试,如果我偷了cookie,注销并手动重新插入cookie,我就会再次进行登录。 所以.aspauth不是服务器端无效的。
我用Google搜索了,我无法找到安全漏洞的答案。
阅读本文关于会话固定以及如何一劳永逸地摆脱它:
Microsoft已在此处确认此问题: https : //support.microsoft.com/en-us/kb/900111
他们提供了一些缓解此漏洞的建议:
- 使用SSL保护应用程序
- 强制执行TTL和绝对过期
- 在ASP.NET 2.0中使用HttpOnly cookie和表单身份validation
- 使用ASP.NET 2.0中的Membership类
关于最后一个,为了方便/保存,我会粘贴网站上的内容:
在ASP.NET 2.0中实现表单身份validation时,可以选择将用户信息存储在成员资格提供程序中。 此选项是ASP.NET 2.0中引入的新function。 MembershipUser对象包含特定用户。
如果用户已登录,则可以将此信息存储在MembershipUser对象的Comment属性中。 如果使用此属性,则可以开发一种机制来减少ASP.NET 2.0中的cookie重放问题。 这种机制将遵循以下步骤:
- 您创建一个挂钩PostAuthenticateRequest事件的HttpModule。
- 如果FormsIdentity对象位于HttpContext.User属性中,则FormsAuthenticationModule类将窗体身份validation票证识别为有效。
- 然后,自定义HttpModule类获取对与经过身份validation的用户关联的MembershipUser实例的引用。 您检查Comment属性以确定用户当前是否已登录。
要点 :您必须将信息存储在Comment属性中,该属性指示用户何时明确注销。 此外,当客户最终再次登录时,您必须清除Comment属性中的信息。
如果用户当前未按“注释”属性的指示登录,则必须执行以下操作:
- 清除cookie。
- 将Response.Status属性设置为401。
- 调用Response.End方法,该方法将隐式地将请求重定向到登录页面。
通过使用此方法,仅当用户尚未明确注销并且表单身份validation票证尚未过期时,才会接受表单身份validationcookie。