【问题标题】:Session Identifier Not Updated in Asp.NET web applicationAsp.NET Web 应用程序中的会话标识符未更新
【发布时间】:2014-01-01 17:15:00
【问题描述】:

最近我们在我们的一个 ASP.NET 应用程序中进行了安全扫描 (IBM AppScan),它报告了一个中等漏洞,如下所示

会话标识符未更新
严重性:中
风险:有可能窃取或操纵客户 session 和 cookie,它们可能被用来冒充合法的 用户,允许黑客查看或更改用户记录,并 以该用户身份执行交易
原因:不安全的网络 应用程序编程或配置。

ASP.NET 工具建议的修复方法是

对于不为 sessionid cookie 生成新值的 ASP 等平台,请使用辅助 cookie。在这种方法中,设置一个 用户浏览器上的辅助 cookie 为随机值并设置 会话变量为相同的值。如果会话变量和 cookie 值永远不匹配,使会话无效,并强制 用户重新登录。

我们为我们的应用程序安装了 SSL 证书,并确保所有 cookie(会话、身份验证和 AntiForgeryToken)都是安全的(RequireSSL="True")-HttpOnly 并且还实施了 Microsoft 的缓解 CSRF 漏洞的建议,如 Microsoft CSRF Fix 中所述.

我的问题是,即使使用 SSL 证书和流量超过 Https,是否仍然可以劫持会话?并且由于我已经在使用辅助 Secure-Httponly cookie(AntiForgeryToken) 我还需要做什么来使应用程序更安全?

【问题讨论】:

    标签: asp.net ssl antiforgerytoken httponly requiressl


    【解决方案1】:

    不确定您是否使用了表单的身份验证,但您可以在用户注销时尝试执行以下操作:

            Session.Abandon();
            // in case a attacker has forced a cookie with a future expiration date, expire that cookie as well
            Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddYears(-30);
            Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
    

    当他们在登出后尝试访问站点时,这将强制 cookie Id 的新值。要查看此功能,您可以使用 Google Chrome,打开您的应用程序并按 F12 以调出开发人员工具。查看资源选项卡下有一个 Cookie 项,您应该在该项下看到您网站的 cookie。在您登录和浏览网站时检查该值,注销上述代码后应强制更改 id。否则即使在注销后它仍然保持不变,这就是 appscan 听起来像是在要求您修复的内容。

    【讨论】:

    • Paritosh 感谢您的回复 是的,我正在使用 Forms 身份验证,如果 appscan 在注销后抱怨删除会话 cookie 是有道理的,让我试试你的建议。但是如果它抱怨可能的问题,我们该如何处理会话劫持何时处于活动状态?真的有可能吗?
    【解决方案2】:

    一般而言,出于多种原因,最好避免在 ASP.NET 应用程序中使用 Session 变量,其中最重要的是保持负载平衡服务器之间的平衡。

    有许多替代方法可以使用存储在会话中的 AntiForgeryToken 作为 同步器令牌模式。一种获得关注的方法是Encrypted Token Pattern,它由一个名为 ARMOR 的框架实现。这里的前提是您既不需要 Session 也不需要 cookie 来维护 CSRF 保护。它不会受到 SSL 证书的影响。

    【讨论】:

      猜你喜欢
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      • 2013-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-16
      相关资源
      最近更新 更多