2010-11-27 17 views
2

ファイルがlogin.phpであるとします。ajaxフォームの提出に対してブルートフォース攻撃を防ぐ方法は?

login.phpは、ユーザー名とパスワードを取得(またはポスト)し、ログインが成功するとtrueを返し、それ以外の場合はfalseを返します。このようにして、他のページはajax経由でアクセスできます。

私の質問は、このメソッドはブルートフォース攻撃に対して脆弱であるため、どのようにこれを保護するべきかということです。私はそれが自分のサイトのフォームから来ていない限りアクセスを拒否することを考えていますが、どうやってそれをやっていきますか?

jqueryを使用してajax呼び出しを行います。

+0

通常のPHPページへの無差別な攻撃はどうやって対処しますか?何も違いはありません。 – epascarello

答えて

0

ブルートフォースは、あなたが考えるよりはるかに難しいです。悪いパスワードを使用している人は、その問題です。弱いパスワード(8文字)でも、攻撃者が1秒に何百万回も試みることができれば、2年間の無差別な強制が必要です。

  1. 5分ごとのユーザー名あたりのログイン試行回数を制限します。これには、データベースに、過去5分間の要求とその時間を多かれ少なかれ保持するテーブルが必要です。 これは、誰かがあなたのユーザーのうちの1人をDoSすることを許すという不幸な副作用があります。
  2. グローバルログイン試行回数の制限...これは簡単ですが、サーバー全体のDDoSを簡単にすることができます。私はそれをしないだろう。
  3. IPまたはIP /ユーザーからの試行回数を制限します。それは簡単なDDoSを許可しませんが、分散ブルートフォース攻撃を止めるわけではありませんので、気にしないでください。

私は以下のことを行います:10文字以上のパスワードを要求します。彼らが十分に強くない、または辞書の言葉に基づいている(しかし、それでもそれらを許可する)場合は、悲鳴を上げる。ログイン要求が多すぎる場合はログし、できるだけ早く個人的に調査してください。

これはすべてサーバー側で発生し、AJAXとは関係ありません。

+2

'悪いパスワードを使用している人は、その問題です':実際にはありません:あなたの1人のユーザーが1週間のパスワードを使用しているためにサーバーが侵害されていると、他のすべてのユーザーの問題です... –

1

私はそれは私自身のサイトのフォームからでない限り、それはアクセスを拒否することを考えています...しかし、どのように

確実にこれを達成することは不可能であることをやって行くだろう。いくつかの種類のcaptchaを使用してスロットル要求を行い、同じIPからの複数の連続した要求をドロップするようにファイアウォールを構成すると、攻撃者の仕事が少し難しくなります。

+0

ハッカーが複数の(10,000+)IPからヒットした場合はどうなりますか? – whoami

1

同じIPからの3回のリクエストの後、サーバからの各応答を2秒ずつ増分するだけです。

セッションまたはクライアント側のメカニズムを使用しないでください。あなたは時間を増やすために使用するIPと番号または失敗した認証を保存するログイン要求のための一時テーブルを使用してください。 ipから認証を試みないで15分後、エントリをフラッシュします。

これで、凶悪な力はあなたのサイトにアクセスしようとして何年もかかるかもしれない悪い人にとっては「少し」微妙になる可能性があります)、私のように再性別を必要とする可能性があるパスワード4または5時間前にエラーなしで良い方^^

関連する問題