PHP でのユーザーのログイン試行の制限
-
22-08-2019 - |
質問
ユーザーのログイン試行に制限がある Web アプリを見たことがあります。
それはセキュリティ上必要なものですか? 必要な場合、その理由は何ですか?
例えば: ログイン試行が 3 回失敗しました。10 分後にもう一度試してみましょう!!
解決
を明確化ののこれは、他の回答に完了です。たとえば、セッションを用いて抗ブルートフォースメカニズムと一緒に良い実装キャプチャを使用した。
CAPTCHAのは、機械によって読み取り不能であることを仮定して(彼女はを、ほぼを右だ)、人々はそれが完全な答えはないと思う&彼らは右だからそう、それは、負のポイントを取得しています。の受け入れとして、質問者はこれをマーク
また良い実装CAPTCHAを使用すると、ブルートフォース攻撃に対するアプリケーションのセキュリティをenpowerする別の方法である可能性があります。キャプチャ・プロバイダーのhref="http://woork.blogspot.com/2009/02/10-free-captcha-scripts-and-services.html" rel="nofollow noreferrer">幅広い無料で利用でき、あなたが急いでいる場合のは簡単な方法を試してみましょう。また、人々がのだと考えてください。 >「ああ、ない!このキャプチャの事は十分に確保されていないと、彼らは右時々だ!」の
の "知らない人のために、CAPTCHAは、そのユーザーがヒトまたは別のコンピュータであるかどうかを伝えることができるプログラムです。彼ら」 Gmailへの登録や、誰かのブログにコメントを残したときに翻訳し、歪んだ文字の再それらのほとんどの画像。彼らの目的は、誰かが自動的にオンラインアカウントの数百万人にサインアップ、またはコンピュータを使用していないことを確認することです。 。」参照する。の
他のヒント
私は一度これに創造的なアプローチを見て...
失敗した各ログイン試行、ロックアウト時間が増加...に対して指数関数的に。
attempt | lockout time
======================
1 | 2s
2 | 4s
3 | 8s
4 | 16s
5 | 32s
6 | 64s
7 | 128s
8 | 256s
9 | 512s
10 | 1024s
理論的には、それはユーザが誤っか2を作る、しかし、すぐにそれが表示される「ハッキング」の試みになることができます、ハッカーが長く、長い期間のためにロックアウトされます。
私自身は(まだ)これを使用しますが、概念的には、私はかなりのアイデアのようにしていません。もちろん、ログインが成功の上に、カウンタがリセットされます。
ウェブサイト上で作られているどのように多くの試みの制限ブルートフォース(自動化)があなたのサイトを攻撃防止しています。あなたはこれらの試みを制限しない場合は、ハッカーはそれが見つかるまで、パスワードを推測保つためにスクリプトを設定することができ、これは、Webサーバーの可用性に影響を与える可能性がある。
一般的に、あなたは(あなたが述べたように、10分)3回の試行後の時間に出て、ユーザをしたい、と自分のアカウントのロックを解除するために、あなたに連絡するようにユーザーを強制的に6つのまたは9個の連続繰り返し試み、後にそれらをロックアウトすることがあります。誰かがあなたのタイムアウトを調整するために彼らのスクリプトを変更することができますので、これは、所定の場所に置かれます。
ユーザーが自分のパスワードを設定することができた場合は、いくつかのボット/子供が共通パスワードのリストを使用してログインしようとすると、成功します。彼らはすべてのユーザーがわからない場合や、彼らは管理者など、サイモン、プエルトリコ、のような一般的な名前をしようとします。
これは、彼らはちょうど彼らの最後にクッキーやクエリのparamを削除することができますようちょうど、セッション中にユーザーにフラグを設定するためには役立ちません。あなたは、IPとログイン名の両方のために失敗したログイン試行の回数を持っている必要があります。多分それは、多くのユーザー間で共有できるように、IPのために、より寛容ます。
私自身のプロジェクトのために、この種のことを処理する汎用的な「フラッドコントロール」ライブラリを作成しました。
これにより、X 時間内に何回試行できるかを指定できます。これにより、短時間に一定回数の「猶予」試行が許可されるため、本当に異常な動作のみが捕捉されます。
データベースにいくつかのことを記録します。
- IP アドレス (またはその最初の 24 ビット)
- 試行されたアクション (つまり、「ログイン」、「検索」、「コメント」)
- 試みの時間
- 試行回数 (試行カウンタ)
試行が行われるたびに、部分的な IP アドレスとアクションに対してクエリを実行し、前の試行が特定の時間枠内に行われた場合は、その試行の試行カウンタをインクリメントします。試行カウンタが許可された猶予試行回数を超えた場合、最後の試行が現在から X 秒以内であるかどうかを確認し、そうである場合は false を返します。そのため、アクションはブロックされます (ユーザーは試行する前に X 秒待つように指示されます)また)。試行カウンタが猶予試行回数を下回っている場合は、true を返し、スライドさせます。
同じ IP を持つ人が後から来た場合、あまりにも前のことになるため、以前の試行回数は取得されません。
はい、それは洗練されたブルートフォース攻撃からアカウントを保護する必要があります。ただ、アカウントのパスワードを推測しようとしている誰かまで
私は、DBの「失敗」カウンタはどこへ行く最も安全かつ簡単な方法だろう置くreckonが。こうすることで、ユーザは(クッキーを無効にして)、それを回避することはできません。もちろん、成功したログインにリセットします。
ほぼ全システムが無価値になり、正しいログイン後に失敗した試みをリセットます。
任意の登録ユーザーは、他人のアカウントとパスワードの3つの推測では、カウンタをリセットして、繰り返して、自分の使ってログインんでした - 自動化することができる、あまりにも。だから、通常の登録ユーザは、例えば、管理者のパスワードをブルートフォースすることができます。
リセットは管理者によってではなく、単純に正常にログインすることで行われる必要があります。