【问题标题】:How to kill .ASPXAUTH cookie at server end?如何在服务器端杀死 .ASPXAUTH cookie?
【发布时间】:2017-02-01 14:47:42
【问题描述】:

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

我建议开发人员在用户注销后立即在服务器端销毁 .ASPXAUTH cookie。但是他们建议cookie和会话相关的东西完全由框架管理,没有办法在服务器端杀死它。

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

提前致谢

【问题讨论】:

    标签: asp.net .net cookies


    【解决方案1】:

    那么有什么办法可以在服务器端杀死 .ASPXAUTH 吗?

    不,没有办法这样做,因为 ASP.NET FormsAuthentication 与服务器上的任何状态都不相关。这是它的弱点之一。您可以做的是将此 cookie 与将在服务器上持久保存的会话状态相关联。这样,为了进行身份验证,仅拥有有效的表单身份验证 cookie 是不够的,但除此之外,它还应该与服务器上的某些状态相关,这些状态可以在您想要的任何时候失效(例如在注销时)。在这种情况下,用户从网站退出后,如果他在通过身份验证时捕获了 .ASPXAUTH cookie 的值,他将无法再使用它。

    【讨论】:

      【解决方案2】:

      为了扩展 Darin 的回答,Web 表单 Cookie 身份验证是无状态的。您的客户说框架在幕后做了很多“魔术”是正确的。不过,这并不是说客户对此无能为力。

      默认情况下,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并强制他们获取一个新的。

      【讨论】:

      • 这个答案有点危险;对于非专家来说,搞砸安全并不是一个好习惯。但是,忽略这个问题意味着密码更改不会使.ASPXAUTH cookie 无效(尽管 cookie 有一个加密的过期时间,所以它最终会过期)。重申一下:账户被盗的用户不能通过密码更改/重置使他们的 cookie 失效。就个人而言,我建议考虑 vcsjones 建议的方法。 FormsAuthenticationTicket 有一个 userData 参数可以很好地用于此目的。
      • 另见SetAuthCookie的参考来源。
      猜你喜欢
      • 1970-01-01
      • 2021-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多