5

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

问题

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

推荐

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

代码

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

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

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

我已经做了一些研究,并认为我应该这样做吗?

        Session.Abandon();

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

4

1 回答 1

6

在 ASP.netSession.Abandon()中不足以完成此任务,它不会从用户浏览器中删除会话 ID cookie,因此对同一应用程序的任何新请求,在会话被放弃后,将使用相同的会话 ID 和新的会话状态实例!正如微软在这里所说。您需要放弃会话清除会话 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>

这是一篇关于会话攻击和 ASP.NET以及如何解决它的好文章。

于 2012-11-03T08:41:57.780 回答