2

ファイルがあるとしますlogin.php

login.phpget (または post) パラメータの username と password を受け取り、ログインが成功した場合は true を返し、それ以外の場合は false を返します。このようにして、他のページは ajax 経由でアクセスできます。

私の質問は、この方法はブルート フォース攻撃に対して脆弱であるため、これをどのように保護するべきかということです。自分のサイトのフォーム以外からのアクセスを拒否できるようにしようと思っているのですが、どうすればいいですか?

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

4

3 に答える 3

1

同じIPからの3つの要求の後、サーバーからの各応答を2秒ずつ遅らせるだけです。

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

それで、ブルートフォースは悪者にとって「少し」トリッキーになる可能性があります)、それは彼のパスワードを再入力する必要がある私のような失読症の人の使いやすさを維持します4または5時間はエラーなしで良いものを前に^^

于 2010-11-27T10:33:57.370 に答える
1

自分のサイトのフォーム以外からのアクセスを拒否しようと思っているのですが…どうしたらいいでしょうか?

これを確実に達成することは不可能です。ある種のcaptchaを使用し、リクエストを抑制し、同じ IP からの複数の連続するリクエストをドロップするようにファイアウォールを構成すると、攻撃者の仕事が少し難しくなります。

于 2010-11-27T10:19:53.153 に答える
0

ブルートフォースはあなたが思っているよりはるかに難しいです。人が悪いパスワードを使用している場合、それは彼らの問題です。弱いパスワード(8文字)でも、攻撃者が毎秒数百万回の試行を行うことができる場合は、2年間のブルートフォース攻撃が必要になります。多くのオプションがあります:

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

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

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

于 2010-11-27T10:29:58.707 に答える