12

ユーザー アカウントに対するブルート フォース攻撃を防ぐために、Java Web アプリケーションでログイン試行を抑制する効率的なメカニズムを実装したいと考えています。

ジェフは理由を説明しましたが、方法は説明しませんでした。

Simon Willison はPython での Django の実装を示しました: 私は memcached も Django も使用できないので、これはあまり役に立ちません。

彼のアイデアをゼロから移植することも、あまり良いことではないように思えます。車輪の再発明はしたくありません。

私はJava の実装を 1 つ見つけましたが、それはやや素朴に思えます。LRU キャッシュの代わりに、15 分後にすべてのエントリをクリアするだけです。

EHCache は memcached の代替手段になる可能性がありますが、私はその経験がなく、このタスクに適した代替手段があれば、さらに別のテクノロジを導入したくありません。

では、Java でログインスロットリングを実装する良い方法は何でしょうか?

4

7 に答える 7

7

EHCache でさえ、ナパーム弾でハエを殺していると思います。問題は単純で、実装もそうです。

サーブレット フィルタをトップ レベルで使用して、できるだけ少ない処理が行われるようにすることをお勧めします。

以下を格納するクラスを作成します。

  • 試行回数 (count)
  • 時間

これで、sunchronized ブロックのコードは単純になりました。

if userid not in attemptMap:
    attemptMap.add ( userid, new attemptItem ( userid, 1, now ) )
else
    tmp = attemptMap.get ( userid )
    if (acquire lock for tmp) :
      if tmp.time + 30 > now :
          tmp.count = 0
          tmp.time = now
      tmp.count++
      if tmp.count > 3 :
          error=true
      release lock for tmp
    else : error=true

それだけです(コードが同期されている限り)。

于 2009-01-19T13:52:25.867 に答える
1

言及されていないのは、パスワードを忘れた質問に何度も失敗してパスワードを入力して回答させることです。

于 2009-01-22T02:55:36.533 に答える
1

アスペクト セキュリティが運営する Web セキュリティ コースを修了したところですが、そこから出てきた提案の 1 つは、ログイン試行に自然遅延を含めることでした。 - ユーザーですが、ブルート フォース攻撃を大幅に妨げます。

于 2009-01-19T13:45:25.817 に答える
0

I've used a Login Attempt count field with user details. When it gets to 50, correct passwords are rejected and the user has to perform a password reset.

于 2009-01-19T15:29:39.040 に答える
0

EHCache は非常に優れており、さらに重要なことに Not Written By You であるため、機能を再実装したり、間違ったりする必要はありません。

私のソリューションでは、ログイン コードに EHCache か、もっと単純なもの (小さなアプリで同時実行パフォーマンスをあまり気にしない場合) を使用します。

IP ごとに、失敗回数とタイムスタンプを保存します。

  • ログイン試行を行うたびに、失敗回数とタイムスタンプの使用が許可されているかどうかを調べます。
  • 許可されたログイン試行を行って失敗するたびに、失敗回数を 1 ずつ増やし、失敗時間を記録します。
  • 許可されたログイン試行を行い、成功するたびに、その IP の情報をクリアします。
于 2009-01-22T04:11:09.547 に答える
0

ログイン試行間の時間の指数関数的な増加はどうですか?

于 2009-01-19T15:41:16.443 に答える
0

間違ったログイン試行回数を維持し、それが N に達する場合は、ユーザーをブロックし、続行するにはキャプチャまたはパスワードのリセットを要求します。

于 2015-06-17T08:36:28.323 に答える