加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 谷歌Chrome在崩溃后恢复会话cookie,如何避免?

发布时间:2020-12-16 09:40:29 所属栏目:asp.Net 来源:网络整理
导读:在谷歌浏览器上(我在 Windows 8.1上看到这个版本35,到目前为止我没有尝试其他版本)当浏览器崩溃时(或者你只是拔掉电源线……)当你’时,你会被要求恢复上一个会话再打开它.好的功能,但它也会恢复会话cookie. 我不想在这里讨论它是否是一个bug或者不管怎么说IM
在谷歌浏览器上(我在 Windows 8.1上看到这个版本35,到目前为止我没有尝试其他版本)当浏览器崩溃时(或者你只是拔掉电源线……)当你’时,你会被要求恢复上一个会话再打开它.好的功能,但它也会恢复会话cookie.

我不想在这里讨论它是否是一个bug或者不管怎么说IMO它是一个中等的安全漏洞,因为对该机器具有物理访问权限的用户可能会“挑起”崩溃来窃取所有内容的未闭合会话(你不会要求再次登录).

最后我的问题是:网站如何避免这种情况?如果我对会话cookie使用普通的ASP.NET身份验证,我不希望它们在浏览器崩溃时存活(即使计算机重新启动!).

用户代理字符串中没有类似于进程ID的内容,并且JavaScript变量都已恢复(因此我无法存储随机种子,生成 – 例如 – 服务器端).还有其他可行的吗?会话超时将处理这个,但通常它很长,并且会有一个不安全的窗口我会消除.

解决方法

我没有找到任何我可以用作进程ID的东西,以确保Chrome没有重新启动但是有一个肮脏的解决方法:如果我设置了一个计时器(让我们说间隔为5秒)我可以检查从多少时间过去最后一刻.如果经过的时间太长,则会话已恢复并执行注销.大致类似这样(每页):

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),但到目前为止,它总比没有好.

更好的解决方案的新答案非常受欢迎.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读