在谷歌浏览器上(我在 Windows 8.1 的 35 版上看到了这个,到目前为止我没有尝试其他版本)当浏览器崩溃时 (或者你只是拔掉电源线...)你会被要求 恢复前一届当你再次打开它时。很好的功能但是它也会恢复 session cookie .
我不想在这里讨论它是否是一个错误无论如何 IMO 它是一个 中度安全漏洞 因为可以物理访问该机器的用户可能会“引发”崩溃以窃取未关闭的 session 及其所有内容(不会要求您再次登录)。
最后我的问题是:网站如何避免这种情况?如果我使用带有 session cookie 的普通 ASP.NET 身份验证,我不希望它们在浏览器崩溃时幸存下来(即使计算机重新启动!)。
用户代理字符串中没有类似于进程 ID 的内容,并且 JavaScript 变量都已恢复(因此我无法存储生成的随机种子 - 例如 - 服务器端)。还有其他可行的吗? session 超时会处理这个问题,但通常它很长,而且我会消除一个不安全的窗口。
最佳答案
我没有找到任何可以用作进程 ID 的东西来确保 Chrome 没有重新启动,但有一个肮脏的解决方法:如果我设置了一个计时器(假设间隔为五秒),我可以检查从最后一个勾。如果耗时太长,则 session 已恢复并已执行注销。大致是这样的(对于每一页):
var lastTickTime = new Date();
setInterval(function () {
var currentTickTime = new Date();
// Difference is arbitrary and shouldn't be too small, here I suppose
// a 5 seconds timer with a maximum delay of 10 seconds.
if ((currentTickTime - lastTickTime) / 1000 > 10) {
// Perform logout
}
lastTickTime = currentTickTime;
}, 5000);
当然这不是一个完美的解决方案 (因为恶意攻击者可能会处理此问题和/或禁用 JavaScript)但到目前为止,总比没有好。
非常欢迎具有更好解决方案的新答案。
关于asp.net - 谷歌浏览器崩溃后恢复 session cookie,如何避免?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24047058/