asp.net中的表单身份验证Cookie值漏洞

时间:2012-06-26 13:49:05

标签: asp.net asp.net-mvc authentication forms-authentication

在asp.net中,我可以像往常一样使用表单身份验证登录,复制我们的auth cookie值,注销,使用Chrome的“编辑此Cookie”插件将cookie人工添加到客户端,刷新(匿名) )登陆页面和嘿presto我再次登录。这似乎是一个漏洞 - 是否有任何方法使用标准表单auth修复它或者我必须做一些事情,比如使用自定义Authorize属性覆盖asp.net mvc中的现有属性?

3 个答案:

答案 0 :(得分:3)

我不认为这本身就是一个错误。在表单身份验证

期间发生以下情况
  1. 您向服务器提供用户名/密码
  2. 服务器验证用户名/密码
  3. 如果有效,服务器会向客户端发送加密的身份验证票证(cookie),其中包含到期时间(在web.config表单身份验证部分中设置)和用户名(全部加密)
  4. 在每个需要授权的请求中,cookie在服务器上解密,检查到期时间并使用用户名来查看是否授权(或获取所请求资源的角色)。
  5. 当您注销时,Cookie的过期时间是过去设置的,因此,它不再是有效的Cookie
  6. 现在,至于为什么你看到你所看到的......你在注销前复制cookie。因此,您复制的cookie永远不会注册注销(移动的到期时间)。重新连接时,您仍然拥有有效的身份验证cookie。现在,如果您的表单身份验证超时设置为...,请说20分钟...如果您复制cookie并等待21分钟,那么此方法将失败,它已经过期。

答案 1 :(得分:1)

Cookie总是很有魅力,我们对此无能为力。我们能做的是阻止有人偷走cookie。

关于ASP.NET MVC,它可以很好地避免窃取cookie。默认情况下,它作为安全的一部分所做的一些主要事情是:

  1. 对呈现给视图的字符串进行编码(如果您使用Razor不了解其他字符串)以防止XSS攻击。

  2. 请求验证(停止有潜在危险的数据到达 应用程序)。

  3. 防止对JSON数据进行GET访问。

  4. 使用防伪助手预防CSRF

  5. 关于cookie,Microsoft提供了HttpOnly功能,这有助于隐藏javascript中的cookie。您正在谈论的表单身份验证是一个HttpOnly Cookie,意味着某人无法通过JavaScript窃取它,而且更安全。

答案 2 :(得分:0)

您可以使用任何 Cookie / s来执行此操作。您可以检查/复制来自任何给定域的所有cookie,并根据需要进行欺骗。您可以执行此操作您自己(仅限),因为它是您的PC(或用户登录到PC)。显然,如果你在共享PC上,这是一个问题(在你的所有信息中)。

“复制您的cookie”的行为实际上是恶意软件企图窃取/劫持您的身份(或某些网站上的当前会话)的一种方式。也就是说,除非你有一些恶意软件,否则你不能只是“复制别人的cookie”。

假设logout已完成,您可以要求用户关闭其浏览器,以便从(文件)系统中删除过期的cookie。