3

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

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

ASP.NET 工具的建议修复是

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

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

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

4

2 回答 2

0

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

        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 听起来像是在要求您修复的内容。

于 2013-12-13T20:28:36.957 回答
-1

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

使用存储在会话中的 AntiForgeryToken 作为同步器令牌模式的一部分有许多替代方法。一种获得牵引力的方法是加密令牌模式,由称为 ARMOR 的框架实现。这里的前提是您既不需要 Session 也不需要 cookie 来维护 CSRF 保护。它不会受到 SSL 证书的影响。

于 2013-12-18T13:42:43.357 回答