【问题标题】:Forms Authentication Cookie value vulnerability in asp.netasp.net 中的表单身份验证 Cookie 值漏洞
【发布时间】:2012-06-26 13:49:04
【问题描述】:

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

【问题讨论】:

  • 在进行此操作之前,您是否在 web.config 中启用了 cookie 保护机制?
  • 那是偷饼干!在第一种情况下,您不应允许任何人复制 cookie :)
  • 这个问题与“如果有人复制我的门钥匙,他们可以进入我的家。我该如何解决?”有何不同?

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


【解决方案1】:

我不认为这本身就是一个错误。在表单身份验证期间会发生以下情况

  1. 您向服务器提供用户名/密码
  2. 服务器验证用户名/密码
  3. 如果有效,则服务器会向客户端发送加密的身份验证票 (cookie),其中包含过期时间(在 web.config 表单身份验证部分中设置)和用户名(全部加密)
  4. 在每个需要授权的请求上,都会在服务器上解密 cookie,检查过期时间并使用用户名查看是否已授权(或获取所请求资源的该角色)。
  5. 当您注销时,cookie 上的过期时间已设置为过去,因此,它不再是有效的 cookie

现在,至于为什么您会看到您所看到的...您在注销之前复制了 cookie。因此,您复制的 cookie 永远不会注册注销(移动的过期时间)。当您重新附加时,您仍然有一个有效的身份验证 cookie。现在,如果您的表单身份验证超时设置为...假设 20 分钟...如果您复制 cookie 并等待 21 分钟,此方法将失败,因为到那时,它已经过期。

【讨论】:

    【解决方案2】:

    Cookie 总是很脆弱,我们对此无能为力。我们能做的是防止有人窃取cookies。

    关于 ASP.NET MVC,它可以很好地避免窃取 cookie。作为安全性的一部分,它默认执行的一些主要操作是:

    1. 对渲染到视图的字符串进行编码(如果您使用的是 Razor,则不知道其他人)以防止 XSS 攻击。

    2. 请求验证(阻止潜在危险数据到达 申请)。

    3. 阻止对 JSON 数据的 GET 访问。

    4. 使用 Antiforgery Helpers 防止 CSRF

    关于 cookie 微软提供了HttpOnly 功能,这有助于从 javascript 中隐藏 cookie。您所说的表单身份验证是 HttpOnly cookie,这意味着有人无法通过 JavaScript 窃取它,而且更安全。

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2013-04-05
        • 2014-04-01
        • 1970-01-01
        • 2012-10-16
        • 1970-01-01
        • 1970-01-01
        • 2021-08-07
        • 2017-10-26
        • 2012-08-01
        相关资源
        最近更新 更多