可以进行没有DoS攻击的Ajax身份验证

时间:2012-01-03 08:43:36

标签: jquery ajax web-services

我有一个用于验证用户身份的Web服务:

public bool ValidateUser(string username, string password,bool rememberMe)
    {
        if(Membership.ValidateUser(username, password))
        {
            FormsAuthentication.SetAuthCookie(username, rememberMe);
            return true;
        }
        return false;
    }

我通过jQuery从客户端调用它:

function validateUser() {

            var username = $('#<%=UserName.ClientID %>').val();
            var pass =$('#<%=Password.ClientID %>').val();
                            $.ajax({
                type: "POST",
                url: "Services/LoginService.asmx/ValidateUser",
                data: "{'username ':'" + username + "','password':'" + pass + "','rememberMe':'" + $('#<%=chbRememberMe.ClientID %>').attr('checked') + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(data, status) { OnSuccessLogin(data, status); },
                error: OnErrorLogin
            });
        }

现在我认为它对拒绝服务攻击持开放态度,黑客可以多次调用Web服务来减慢服务器速度。

有没有办法保护它?

2 个答案:

答案 0 :(得分:1)

据我所知,您可能会担心攻击者会根据请求充斥您的身份验证网络服务。如果对Membership.ValidateUser的调用很昂贵,这可能导致DOS。

首先确保您已完成外部应用程序层的所有操作以避免DDOS。谷歌是你的朋友,也许this会帮助你。

其次,如果Membership.ValidateUser价格昂贵,请尝试进行两步验证过程:使用第一个请求为客户端廉价生成Proof-of-work令牌,并仅接受对{{1}的调用如果客户端做了一些工作,则在第二个请求中。

答案 1 :(得分:0)