2012-02-05 12 views
5

私は自分のシステムを実装した後、これを2日間研究してきました。しかし、私は、私が探している適切な答えを見つけられませんでした。これはどれくらいですか、これを実装する最良の方法は何ですか?あまりにも多くのログイン試行の後に禁止を実装する最善の方法

現在、私は同じIPが連続してログインミスを10回、IPがサインインできないように30分間禁止されていれば、ウェブサイトをまだ閲覧することができます。しかし、これが大学のキャンパスなどの人口が多い地域で発生した場合、これが学校全体のログインを効果的にブロックしないでしょうか?

IPアドレスを使用しないので、これを行うより良い方法がありますか?私はクッキーでそれを行うことができると思っていましたが、アカウントを強制的に使用しようとするユーザーは、10回の試行ごとにクッキーを削除することができます。

+0

あなたは、既存の認証フレームワークを再使用する必要があります。たとえば、フレームワークにとらわれずデータベースに依存しないhttps://github.com/delight-im/PHP-Authを見てください。それはあなたが望むものであるスロットリングを自動的に行います。 – caw

答えて

4

私が一度行ったアプローチは、私の銀行の電子バンキングページで遭遇したアプローチに似ています。アカウントごとに、例えば10秒、1分、5分、15分、次に30分待つ5回の試行など、時間のかかるログインをさらに禁止します。 攻撃者は通常、特定のアカウントを対象としています。また、IPアドレスごとにグローバルルールを適用する必要があります。一定の回数試行した後にログインをロックします。これは5以上、たとえば10です。両方のルールに加えて、ブラウザとCookieなどを比較して許容範囲を拡大できます。

+1

この問題はまだ解決していますが、それはそのIP上のすべてのユーザーをブロックして、待ち時間を増やします。これは、私が使っている実装と同じ問題です。 – JimmyBanks

+0

ターゲットアカウントの待機時間は増えますが、それ以外の時間は増えません。できる限りクッキーを評価することもできます。追跡するクッキーがなければ、他の手段がとられることがあります。適切なクライアント情報を持たない純粋なブルートフォース攻撃は、IPによって、または部分的に永続的な接続のIP:ポートによってブロックされる可能性があります。 – Sam

+0

ああ、私はあなたが意味するものを参照してください、それはかなり効果的だろう、私は前にそれを考える必要があります;) – JimmyBanks

5

"User"フィールド/外部キーと "Timestamp"フィールドの2つのフィールドを持つ "failed_logins"という名前のmysqlテーブルを作成します。

ユーザーが正常にログインすると、そのユーザーのすべての「failed_logins」行が削除されます。

ユーザーがログインに失敗した場合は、現在のタイムスタンプを持つそのユーザーの「failed_logins」に新しい行を作成します。

  • は15分(例えば)よりも古いすべての「failed_logins」行を削除クエリを実行します。パスワードが間違っ/正しいかどうかを確認するためにチェックする前に、そのユーザのすべてのログイン試行で

    、。

  • loginしようとしているユーザーのfailed_loginsの行数を確認するクエリを実行します。 > = 5(たとえば)の場合は、ログイン試行を中止し、ユーザーにアカウントからロックアウトされたことを通知し、しばらくしてから試してみてください。

結果:5は15分以内にログイン試行を失敗した後 ユーザーが自分のアカウントからロックアウトされています。

-5

場合によっては、パスワードで保護されたウェブサイトに特別な保護機能を追加する必要があります。この記事では、ログイン試行が3回失敗した後にログインページへのアクセスを制限する方法について説明します。このスキーマでは、訪問者のIPアドレスを使用してログの試行をデータベースに格納し、3回目の試行の失敗後にログイン機能へのアクセスをブロックします。可能な限り、本当に、それは複雑だから

http://webcheatsheet.com/php/blocking_system_access.php

関連する問題