Adr*_*tti 5 .net asp.net authentication google-chrome session-cookies
在谷歌浏览器(我认为这与35版本的Windows 8.1,到目前为止,我没有尝试其他版本)时,浏览器崩溃(或者你只是拔掉电源线......),你会被要求恢复以前的会话,当你”再次打开它。很好的功能,但它也可以还原会话cookie。
我不想在这里讨论它是否是错误,无论如何,IMO都是中等安全性错误,因为具有物理访问该计算机权限的用户可能会“引起”崩溃,以窃取所有内容的未关闭会话(您不会要求再次登录)。
最后,我的问题是:网站如何避免这种情况?如果我对会话cookie 使用普通的 ASP.NET身份验证,则我不希望它们在浏览器崩溃的情况下幸免(即使重新启动计算机!)。
在用户代理字符串中没有类似于进程ID的东西,并且JavaScript变量都已还原(因此,我无法存储生成的随机种子(例如,服务器端))。还有其他可行的方法吗?会话超时将解决此问题,但通常会很长,并且会消除一个不安全的窗口。
我没有找到任何可以用作进程 ID 的内容来确保 Chrome 尚未重新启动,但有一个肮脏的解决方法:如果我设置一个计时器(假设间隔五秒),我可以检查从最后一个刻度。如果经过的时间太长,则会话已恢复并执行注销。大致是这样的(对于每个页面):
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);
Run Code Online (Sandbox Code Playgroud)
当然,这不是一个完美的解决方案(因为恶意攻击者可能会处理这个问题和/或禁用 JavaScript),但到目前为止,它总比没有好。
具有更好解决方案的新答案非常受欢迎。
归档时间: |
|
查看次数: |
741 次 |
最近记录: |