终止服务器上的会话标识符

时间:2012-10-30 17:02:54

标签: .net session security session-cookies

我们对我们的网站进行了安全测试,并且已发现漏洞。

问题

  

如果有权访问的攻击者知道会话标识符   用户的工作站,可以使用注销会话   用户终止会话后的会话cookie。

建议

  

确保在服务器上正确终止会话标识符   调用注销功能时的一面。

代码

代码目前执行此操作(如果用户单击“注销按钮”)

        FormsAuthentication.SignOut();
        Roles.DeleteCookie();
        Session.Clear();

我不确定如何检查“确保在调用注销函数时在服务器端正确终止会话标识符。”

我做过一些研究,并认为我应该这样做呢?

        Session.Abandon();

如果没有,我该怎么办? (我不完全确定如何测试这个...)

1 个答案:

答案 0 :(得分:6)

在ASP.net中Session.Abandon()不足以完成此任务,它不会从用户的浏览器中删除会话ID cookie,因此在会话被放弃后,对同一应用程序的任何新请求都将使用相同的会话ID和新的会话状态实例! As Microsoft states here。您需要放弃会话清除会话ID Cookie:

Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

web.config文件中更改表单身份验证Cookie名称也是一种很好的做法:

<authentication mode="Forms">
  <forms name=".CookieName" loginUrl="LoginPage.aspx" />
</authentication>

这是一篇关于Session Attacks and ASP.NET的好文章以及如何解决它。