2012-01-03 113 views
1

我有,我用它來驗證用戶的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

回答

1

據我可以告訴你的帖子,你擔心攻擊者會用請求氾濫你的認證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