asp.net - 谷歌浏览器崩溃后恢复 session cookie,如何避免?

标签 asp.net .net google-chrome authentication session-cookies

在谷歌浏览器上(我在 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/

相关文章:

c# - 如何使用 Windows 应用程序在服务器上执行 shell 脚本

css - 为什么有时 Chrome 开发工具会显示 scss 文件而不是编译后的 css 文件?

javascript - 使用 `which` 属性以编程方式触发 keydown 事件

.net - 使用 .NET 正则表达式,匹配任何恰好 9 位数字的字符串

c# - ASP.NET GridView RowIndex 作为 CommandArgument

asp.net - 如何在WPF 4.0中调用Web API

asp.net - IIS 服务于 ASPX 但不服务于 ASMX

c# - 如何使控制台应用程序从 Xamarin studio 中的空项目运行

javascript - atob() 在 Safari 中出现异常,但在 Chrome 中有效

asp.net - 从代码中从rdlc文件获取数据集