Asp.Net形成认证重放攻击

时间:2013-09-03 16:34:13

标签: asp.net authentication webforms replay

我们遇到了一个用户注销的场景,并重播了之前的好会话cookie(包括滑动时间窗口),我们的代码以用户身份直接跳转到所请求的页面。我们没有在服务器中维护会话状态。这个Asp.Net形成了身份验证。

我认为唯一的解决方案是向服务器添加列以跟踪用户日志状态。不是很难,但需要代码,数据库和部署来完成。

这是处理此问题的最佳方法吗?因为无论如何我们都必须破解代码,我们可以将客户端请求ip和其他内容添加到cookie中。但目前的欺骗是重用客户端机器以及会话。

有什么想法吗?

提前致谢

BILLE

检查不活动的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();
        });

/****************************************************************** 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(); });

1 个答案:

答案 0 :(得分:0)

我最终通过跟踪用户登录/退出状态和活动时间戳来解决此问题。收到重播会话后,我们仍然会解密表单票证并找到有效的“会话”信息。这标识了用户,然后检查是否已注销,如果是,则重定向到登录页面。

如果用户在未注销的情况下终止浏览器,则活动时间戳将用于扫描注销非活动用户的用户表的sql作业。

weidson