AJAX验证没有DoS攻击可能

问题描述:

我有,我用它来验证用户的Web服务:AJAX验证没有DoS攻击可能

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服务来降低服务器速度。

有没有办法来保护它?

+1

请clearify如果你问在TCP层(问题标题表明这一点)或SYN-Flood的,如果你是问有关在DoS攻击服务水平。 – 2012-01-03 08:55:03

+0

我的意思是DoS服务,我改变了标题。 – Mahdi 2012-01-03 09:05:23

据我可以告诉你的帖子,你担心攻击者会用请求泛滥你的认证Web服务。如果拨打Membership.ValidateUser昂贵,可能会导致DOS。

首先确保你已经做好了以外的所有的应用层以避免DDOS。谷歌是你的朋友,也许this将有所帮助。

其次,如果Membership.ValidateUser是昂贵的,尽量让两步验证过程:使用第一个请求以较低的成本产生Proof-of-work令牌的客户端只有在第二个请求接受调用Membership.ValidateUser如果客户端已经完成一些工作。

+0

由于我的客户端使用JavaScript为工作证明创建了答案,攻击者可以复制代码并使用相同的方法来回答服务。所以它如何工作? – Mahdi 2012-01-03 10:01:14

+2

这就是美工和工作证明的目的:攻击者在生成工作证明和价格低廉的服务器上检查证明的计算成本很高。比方说,为了举例说明,需要250 ms来生成工作证明,并且您的服务器可以在5 ms内处理证明。这将限制攻击者每秒4次攻击,而服务器可以检查200次/秒。攻击者知道算法并不重要,它仍然需要执行才能生成工作证明。 – chiborg 2012-01-03 11:06:23