【问题标题】:How to invalidate a http session after logout注销后如何使http会话无效
【发布时间】:2015-06-29 06:19:28
【问题描述】:

我正在 asp.net mvc 中创建一个 Web 应用程序,它使用表单身份验证来验证用户身份。 我正在使用 HTTP 代理工具“burp”来捕获经过身份验证的用户身份验证的 cookie。之后,我从应用程序中注销。现在我正在使用捕获的经过身份验证的 cookie 向我的服务器发送请求,并且服务器将请求视为经过身份验证的请求(即使该用户从我的浏览器中注销)。 谁能让我知道我的注销代码哪里出错了?

以下是我的应用程序注销代码

  public virtual ActionResult LogOff()
    {
        FormsAuthentication.SignOut();
        Session.Abandon();

        // clear authentication cookie
        HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, "");
        cookie1.Expires = DateTime.Now.AddYears(-1);
        Response.Cookies.Add(cookie1);

        // clear session cookie 
        HttpCookie cookie2 = new HttpCookie("ASP.NET_SessionId", "");
        cookie2.Expires = DateTime.Now.AddYears(-1);
        Response.Cookies.Add(cookie2);

        HttpCookie cookie3 = new HttpCookie("__RequestVerificationToken", "");
        cookie3.Expires = DateTime.Now.AddYears(-1);
        Response.Cookies.Add(cookie3);

        HttpCookie cookie4 = new HttpCookie(".ASPXAUTH", "");
        cookie4.Expires = DateTime.Now.AddYears(-1);
        Response.Cookies.Add(cookie4);


        return RedirectToAction(MVC.Account.Login());
    }

下面是 burp 工具发送认证请求并给出成功响应的屏幕截图

【问题讨论】:

  • 我看到cookie3cookie4cookie2 属性又要到期了??
  • 您能否显示使用捕获的经过身份验证的 cookie 发送请求的代码,以及您何时执行此操作?
  • 您能否在设置 cookie 的位置发布您的代码:FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
  • @GuruprasadRao 我没有通过代码发送经过身份验证的请求。我用来捕获请求的 HTTP 代理工具“Burp”具有称为中继器的功能,我正在使用它来发送请求。我在我的问题中添加了相同的屏幕截图
  • @GaneshTodkar 这是我设置身份验证cookie FormsAuthentication.SetAuthCookie(username, true);

标签: asp.net-mvc-4 session authentication cookies burp


【解决方案1】:

经过大量搜索后,我得到了结果,没有正确的方法可以使经过身份验证的 cookie 无效。经过身份验证的cookie“.ASPXAUTH”(身份验证cookie的默认名称)基本上只包含用户名、生成时间和到期详细信息。它并不能真正告诉用户是否真的经过身份验证。

如果用户注销此 cookie 会从浏览器中删除,但如果此 cookie 保存在某个捕获的位置,它仍将用作经过身份验证的请求。

我找到的唯一解决方案是使用此 cookie 添加一些额外的唯一数据,并将该数据存储在服务器(可能是数据库)的某个位置,并比较来自数据库的每个身份验证请求中的唯一数据。并且当用户注销时从数据库中清除该唯一数据,这将确保如果在用户注销后通过某种方式捕获的经过身份验证的请求命中服务器,则不会在服务器上获得身份验证。

【讨论】:

    猜你喜欢
    • 2015-01-04
    • 2015-08-14
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    相关资源
    最近更新 更多