2009-03-25 11 views
5

ユーザーのログイン試行に制限のあるWebアプリケーションを見たことがあります。PHPでのユーザーログインの試行を制限する

セキュリティの必要性はありますか?その場合、なぜですか?例えば

あなた持っていた3回の失敗したログイン試行、のは10分後にもう一度試してみましょう!

答えて

2

明確化これは他の回答の補完です。たとえば、セッションを使用してanti-bruteforceメカニズムと一緒に良い実装のcaptchaを使用する。
質問者は、キャプチャがコンピュータによって読み取れないことを前提としていると承知しています(彼女はほぼです)ので、人々はそれが完全な答えではないと思っているので、


も良い実装CAPTCHAを使用すると、ブルートフォース攻撃に対するアプリケーションのセキュリティをenpowerする別の方法である可能性があります。あなたが急いでいるなら、無料で利用できるwide variety of captcha providersがあります。簡単な方法を試してみましょう。またpeople outtaにはがあることを考慮してください。「ああ、いけない!このcaptchaのものは安全ではなく、時には正しい!」

「あなたが知らない人のために、CAPTCHAは、ユーザーが人間であるか別のコンピュータであるかを判断できるプログラムです。登録時に翻訳される歪んだテキストの小さな画像ですGmailのために、または誰かのブログにコメントを残すことを目的としています。その目的は、コンピュータを使用して何百万ものオンラインアカウントに自動的にサインアップしないようにすることです。 "ref

+2

@artarad:ログインしようとするたびにcaptchaを取得すれば、私は非常に迷惑になります。私はそれが3回失敗するまで表示されるべきではないと思っています。そして、3回ほど試してみてください。 Captchasはマシンによって破壊されない...ちょっと難しい。私の教授がスクリプトの90%以上をクラックしたと思う。 – mpen

2

あるブルートフォースを防ぐ方法多くのウェブサイト上で行われる試行の制限は、(自動化)あなたのサイトを攻撃します。これらの試行を制限しないと、ハッカーはパスワードを見つけるまでパスワードを推測し続けるスクリプトを設定することができ、これがWebサーバーの可用性に影響する可能性があります。

通常、3回の試行後にユーザーを退席させ(前述のとおり10分)、6回または9回連続して試行した後にユーザーをロックして、アカウントのロックを解除します。これは、誰かがあなたのタイムアウトを調整するためにスクリプトを修正できるので、配置されます。以下のように、ボットや辞書ファイルを使用して - - ちょうどアカウントのパスワードを推測しようとしている誰かまで

+0

だから私は、ユーザーの資格情報が失敗したときにコードを実装する必要があります。電子メールアドレス(たとえば)に無効な形式がある場合は不要です。本当ですか?クッキーでこれを実装するのは大丈夫ですか、それともdbsを使ってやる必要がありますか?お返事ありがとうございました:) –

+0

あなたのサイトをどれだけ安全にするかによって、あなたが何をする必要があるのか​​を判断する最善の方法は、ユーザーがログインするたびに、電子メール、ユーザー名、IPアドレス、パスワードが正しいかどうかを追跡するたびにログを記録することです。 –

+0

(続き)入力された実際のパスワードを記録しないように注意してください。トレンドが見える場合は、コードを変更してそれを考慮してください。人々がそれを悪用しようとしない限り、私はタイプミスをユーザーに対して打つとは考えません。 –

0

はい、それは洗練されたブルートフォース攻撃からアカウントを保護する必要があります。

2

、ユーザーが自分のパスワードを設定することができた場合は、いくつかのボット/子供は、共通のパスワードのリストを使用してログインしようとすると、成功します。ユーザーが知らない場合は、admin、simon、ricoなどの一般的な名前を使用します。

Cookieやクエリを削除するだけでセッションにユーザーをフラグするのは役に立ちません。彼らの最後にparam。 IPとログイン名の両方に失敗したログイン試行の回数が必要です。おそらく、IPを多くのユーザーが共有できるようになるにつれて、IPをより寛容にするかもしれません。

1

自分のプロジェクトでは、このようなことを処理する一般的な 'floodcontrol'ライブラリを作成しました。

Xの時間内に試行できる試行回数を指定することができます。短時間で一定数の「猶予」を許して、本当に異常な振る舞いしか捉えられないようにします。

私は、データベース内のいくつかの記録:「検索」、

  • IPアドレス(またはそれの最初の24ビット)
  • (すなわち、「ログイン」しようとした行動を、各試行のための「コメント」)
  • 試みの試み
  • 番号(試行カウンタ)

の時間は、私は部分的なIPアドに対​​してクエリ作らそして以前の試みが特定の時間内に行われた場合は、その試みの試行カウンタを増やします。試行カウンタが許可された猶予回数を超えた場合、最後の試行がX秒以内であったかどうかをチェックし、そうであればfalseを返します。したがって、アクションはブロックされます。再び)。試行カウンターが猶予試行回数を下回っている場合は、真を返してスライドさせます。

同じIPを持つ人が後で来る場合、前回の試行回数はそれほど前に取得されるため、取得されません。

+1

ネットワーク上で同じIPアドレスを使用している人に注意してください。 1人の外部IPを持つアパートに10人がいて、あなたのサイトを検索しようとすると、すぐにすべてがロックアウトされます。 –

+0

良い点。猶予ログインの回数は、通常のログイン活動の影響を受ける可能性が非常に低くなるように十分高くなければなりません。たとえば、似たIPアドレスの20人が数分以内にすべてログインすると、猶予ログインが<20の場合にトリガーされる可能性があります。 – thomasrutter

+1

つまり、許容範囲を増やすことは唯一の選択肢です。 IPアドレスは一意の人物を識別する際には信頼できませんが、インターネット上ではあなたが持つ唯一の識別子です。ユーザーエージェントの文字列も考慮に入れることができます。 – thomasrutter

7

私は指数関数的に失敗し、各ログイン試行、ロックアウト時間が増加...のために...一度

をこれに創造的なアプローチを見ました。

attempt | lockout time 
====================== 
    1 |  2s 
    2 |  4s 
    3 |  8s 
    4 | 16s 
    5 | 32s 
    6 | 64s 
    7 | 128s 
    8 | 256s 
    9 | 512s 
    10 | 1024s 

は理論的には、ユーザが誤っまたは2、しかし、すぐに「ハッキング」の試みになるために表示されているとおり、ハッカーが長く、長い期間のためにロックアウトされますを行うことができます。

私はこれをまだ使っていませんが、概念的にはかなりアイデアが好きです。もちろん、ログインに成功すると、カウンタはリセットされます。

+2

私は前にこのようなものを実装しましたが、それは十分に許していないことがわかりました。時にはパスワードを忘れてしまい、いくつかの組み合わせを試す必要があるかもしれません。おそらくこのようなことを試してみてください。最初の6つがすべて0であることを確認してから、浅く立ち上がります。 – thomasrutter

+0

それはうまくいくでしょう。アイデアは、ハッキングエントリの「カジュアル」な試みを制限することです。深刻なシステムは、辞書攻撃、ボットネット、複数のIPなどの兆候を考慮する必要があります。 – scunliffe

+1

@マーク私は同意し、理解しています...したがって、ロックアウト時間は小さく始めなければならず、後でもっと大きくなる必要があります。時間はOKでなければなりませんが、6以上は通常、ハックの試みを示します。私が投稿した時間はちょうどランダムでした...あなたのニーズに合わせて調整します(このロジックを使用する場合)。また、必要に応じて、ユーザーが電話をかけてカウンタをリセットできるリンクを有効にするか、電話番号を表示します。 – scunliffe

0

DBに「失敗した試行回数」カウンタを入れることは、最も安全かつ簡単な方法です。そうすれば、ユーザーはそれをバイパスすることはできません(クッキーを無効にすることによって)。もちろん、ログイン成功時にリセットします。

+0

ユーザーはどのようにバイパスすることができず、2人のユーザーにどのように区別するのでしょうか? – thomasrutter

+0

もちろんIPアドレス。はい、これは、同じIPを持つ複数のユーザーに問題を引き起こす可能性があります。しかし、CAPTCHAなどを表示しただけでは、その試みを使い切ってしまった場合、大きな損失はないと思います。これは実際に下院を正当化したか? – mpen

+2

あなたはいつもユーザー名でそれを数えることができます。 IPアドレスだけではなく、ユーザー名+ IPアドレスが分離されるようにします。これは、共有IPが、同じアカウントを試していない限り、問題を引き起こさないことを意味します。もちろん、それは分散型のボットネットが自由に統治できるようにするため、IPアドレスを完全に削除しないのはなぜですか? – RonLugge

0

正しいログイン後に失敗した試行をリセットすると、システム全体が役に立たなくなります。

登録ユーザーは誰かのアカウントとパスワードで3つの推測を行い、次に自分自身でログインしてカウンタをリセットし、繰り返すことができます。これは自動化することもできます。そのため、通常の登録ユーザーは、たとえば管理者パスワードを強制的に使用できます。

リセットは管理者が行う必要があり、単にログインするだけでは不十分です。

+4

失敗したログイン試行が、誰かがログインしようとしている特定のユーザーアカウントに対してカウントされていない場合。 – Ren

+0

あなたの答えが意味するように、失敗したログインのための単一の中央カウンタを持つことは、3つの推測が間に合わない場合は、最初のログインを試みるために少し待たなければならないことを暗示します。 – Flygenring

関連する問題