2009-10-01 120 views
0

我有一个网站,其中人们的“登录”状态由他们的会话cookie(以及他们登录后获得的会话内的值)确认。该cookie设置为httpOnly &需要SSL。ASP.NET会话状态安全问题

比方说,某人有2个Firefox窗口打开,窗口(A)有我的应用程序和他们登录和窗口(B)有别的东西打开。

如果他们没有明确的退出时关闭窗口(A),然后打开一个新的窗口(C)和访问登录,只能从我的web应用程序资源,它仍然会加载,因为cookie是仍然有并且他们被认证。我的会话超时已经很低,但我需要阻止这种攻击的可能性,因为人们可以在公用计算机上访问他们的数据。

我该如何防止这种情况发生?

+0

你是在谈论新的浏览器窗口或新标签在同一个浏览器? – Kamarey

+0

@Kamarey:一个新的浏览器窗口。如果(A)在没有注销的情况下关闭并且打开一个新窗口(C),并且将前一个(A)的URL复制到(C)中,则我可以再次访问登录的内容。 – Alex

+0

我知道最新版本的Firefox在关闭所有窗口后甚至保持同一会话。下一次您将继续像以前一样使用同一个会话。可能你的cookie已经超时了,因为你的超时时间非常短。 – Joop

回答

1

不知道其他浏览器,但Firefox在所有浏览器窗口中保持相同的会话ID。您应关闭Firefox的所有窗口以生成新的会话ID。因此,在您的示例关闭窗口A和B,然后打开C,你应该重定向到登录页面或其他东西。

0

你可以去一个简单的方法来销毁window.close事件上的cookie。

0

大多数浏览器都具有此功能,因为所有窗口都可以为同一个站点共享相同的会话cookie。我不知道服务器端阻止浏览器执行此操作。

如果您确实需要从发生,那么我只能建议存储在页面的附加值自己或查询字符串,并确认您的会话中该值阻止这一切。

虽然这可能会证明您的安全性已经彻底改变。