2012-01-03 8 views
1

可能DoS攻撃せずに私はユーザー認証のためにそれを使用した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サービスを何度も呼び出すことでサーバを減速させることができます。

これを保護する方法はありますか?

+1

あなたはTCPレベルでSYN-洪水について尋ねている場合clearify(質問のタイトルがこれを提案する)か、DoS攻撃にについて尋ねている場合してくださいサービスレベル。 –

+0

サービスのDoSを意味し、タイトルを変更しました。 – Mahdi

答えて

1

あなたの投稿から私が知る限り、攻撃者はあなたの認証Webサービスに要求をあふれさせるのではないかと心配しています。 Membership.ValidateUserの呼び出しが高価な場合は、DOSにつながる可能性があります。

まず、の外側にあるの外側に、DDOSを避ける​​ためにすべての作業を行ってください。 Googleはあなたの友人です、おそらくthisが役に立ちます。 Membership.ValidateUserが高価である場合

第二に、二段階認証プロセスを作ってみる:安価クライアントのProof-of-workトークンを生成するための最初の要求を使用して、クライアントのみが行われた場合に、第2の要求にMembership.ValidateUserへの呼び出しを受け入れますいくつかの作業。

私は良い方法を見つけたと思う
+0

私のクライアントは作業の証明書の回答を作成するためにjavascriptを使用しているため、攻撃者はコードをコピーして同じ方法でサービスに回答できます。どのように動作するのですか? – Mahdi

+2

これは、作業証明の美しさと目的です。攻撃者が作業証明を生成し、サーバーが証明をチェックするのに費用がかかります。例として、作業証明を生成するのに250ミリ秒かかり、サーバーが5ミリ秒で証明を処理できるとします。これにより、攻撃者は1秒あたり4回の攻撃に制限され、サーバーは毎秒200回の要求を確認できます。攻撃者がアルゴリズムを知っているかどうかは関係ありませんが、それでもまだ作業証明を生成するために実行する必要があります。 – chiborg