如何在服务器端杀死.ASPXAUTH cookie?

时间:2016-09-23 16:52:22

标签: asp.net .net cookies

我不是开发人员,而是渗透测试人员。在基于.NET框架的网站上进行测试时,我报告了“不正确的会话管理”问题。用户使用.ASPXAUTH cookie进行了身份验证。当用户注销时,会在客户端浏览器中将.ASPXAUTH cookie值设置为空白。但如果您使用相同的.ASPXAUTH,请手动将其放入浏览器并刷新页面用户直接进行身份验证。

我建议开发人员,一旦用户注销,.ASPXAUTH cookie就会在服务器端被销毁。但他们建议cookie和会话相关的东西完全由框架管理,并且它无法在服务器端被杀死。

那么有没有办法杀死服务器端的.ASPXAUTH?

提前感谢

2 个答案:

答案 0 :(得分:5)

  

那么有没有办法在服务器端杀死.ASPXAUTH?

不,由于ASP.NET FormsAuthentication与服务器上的任何状态无关,因此无法执行此操作。这是它的弱点之一。您可以做的是将此cookie与将保留在服务器上的会话状态相关联。这种方式为了进行身份验证,它不足以拥有有效的表单身份验证cookie,但除此之外,它应该与服务器上的某些状态相关,可以在任何时候失效(例如,当注销时) )。在这种情况下,在用户退出网站后,他将无法再使用.ASPXAUTH cookie,假设他在认证时已经获取了它的价值。

答案 1 :(得分:2)

为了扩展Darin的答案,Web Forms Cookie auth是无状态的。您的客户说明该框架在幕后做了很多“魔术”是正确的。但这并不是说客户无法对此做些什么。

默认情况下,Forms Auth cookie是无状态的。它包括某种标识符(用户名,用户ID,由开发人员决定),以及它的相关信息。您可以在cookie上设置许多属性(是会话cookie,它有多长时间等),但这不会影响cookie的内容如何处理。然后,cookie的内容由机器密钥加密和MAC,以便它们不会被篡改,但这并不妨碍它们可移植或可重放。

如果客户需要,客户端可以继续使用表单身份验证,他们只需要从所有魔法中退一步。

我认为他们正在做FormsAuthentication.SetAuthCookie之类的事情。相反,他们可以创建一个FormsAuthenticationTicket,允许包含用户提供的数据。这些数据可以是与会话相关的东西(不一定是HTTP会话)。然后使用FormsAuthentication.Encrypt加密票证,并返回一个cookie,可以在成功的身份验证响应中设置。

当页面加载时(或者更好地在Global.asax的Application_AuthorizeRequest中),他们可以从请求中获取cookie,调用FormsAuthentication.Decrypt来解密身份验证cookie,并检查用户数据是否与会话。

当用户明确注销时,请清除该用户的会话,使其不再与cookie匹配。然后检查用户数据应拒绝cookie并强制他们获取新的cookie。