会话标识符未在Asp.NET Web应用程序中更新

时间:2013-12-13 19:58:17

标签: asp.net ssl antiforgerytoken httponly requiressl

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

  

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

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

  

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

我们已为我们的应用程序安装了SSL证书,并确保所有cookie(会话,身份验证和AntiForgeryToken)都是安全的(RequireSSL =“True”) - HttpOnly并且还实现了Microsoft的缓解CSRF漏洞的建议{{3 }}

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

2 个答案:

答案 0 :(得分:0)

不确定您是否使用Form的Authencation,但是当用户退出时您可以尝试执行以下操作:

        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添加新值。要查看此功能,您可以使用谷歌浏览器,打开您的应用程序并按F12打开开发人员工具。在“资源”选项卡下查看下面有一个Cookie项目,您应该看到您网站的cookie。在您登录并浏览网站时检查该值,在注销上述代码后应强制更改ID。否则即使在注销后它仍保持不变,这就是应用程序听起来像是要求你修复它。

答案 1 :(得分:-1)

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

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