【发布时间】:2013-09-03 16:34:12
【问题描述】:
我们遇到了这样一个场景:用户注销并且之前的良好会话 cookie(包括滑动时间窗口)被重放,并且我们的代码作为用户直接跳转到请求的页面。我们不在服务器中维护会话状态。此 Asp.Net 形成身份验证。
我认为唯一的解决方案是向服务器添加列以跟踪用户日志状态。并不难,但需要代码、数据库和部署来完成。
这是处理此问题的最佳方法吗?由于无论如何我们都必须破解代码,我们可以将客户端请求 ip 和其他内容添加到 cookie 中。但是当前的欺骗是重用客户端机器以及会话。
有什么想法吗?
提前致谢
账单
检查不活动的Javascript代码 -> 注销
$j(document).ready(function () {
/******************************************************************
Auto-logout after the user's session times out
******************************************************************/
var timeOut = (_TIMEOUT - 5) * 60;
var setTimeout = function () {
$j(".session-timeout").stopTime().oneTime(timeOut + "s", function () {
$j(this).show();
$j(this).oneTime("300s", function () {
window.location = $j(this).find("a.logout").attr("href");
});
});
};
$j(".session-timeout a.refresh-session").click(function () {
NextGen.CHS.UtilitiesWebService.RefreshSession(
function () {
$j(".session-timeout").fadeOut();
setTimeout();
},
function () {
}
);
});
setTimeout();
});
【问题讨论】:
-
当用户注销时,它只是在当前页面做回发,还是去一个注销页面?通过重放攻击,您知道来自另一台机器的攻击者,或者您说的是同一台机器,能够做到这一点?
-
有两种方法。客户端超时导致 ajax 调用使会话无效。单击注销按钮时定期回发。
-
另外,攻击来自同一台机器(可能是 IP/MAC 欺骗)我们让登录的用户注销并将机器留给其他用户。
-
您可能需要考虑使用 JavaScript 重定向到注销页面,而不是使用 AJAX,通过
window.location='logout.aspx'; -
我用检查非活动客户端的 javascript 代码编辑了原始问题。
标签: asp.net authentication webforms replay