1

Web サイトのログイン スクリプトに取り組んでおり、オリエンテーションが必要です。私の懸念はセキュリティについてです..

ログインページとログインクラスの2つが関係しており、以下のようにセキュリティを管理しています。

login.php 内のフォームにはトークンがあり、ユーザーがフォーム (「php_self」をターゲット) を送信すると、クラスを呼び出します。

  • トークンを検証する
  • ユーザーがブロックされていないか確認する
  • bcrypt でパスワードが正しいかどうかを確認します。
  • ログインが失敗した場合、そのユーザーの最後のログインの試行回数と日時をデータベースに保存します
  • 2 回目の試行の場合は、フォーム内に recaptcha を配置します。キャプチャは jquery/ajax を介して検証され (使いやすさの理由から)、サブミット後にクラスのサーバー側で再度検証されます (誰かが ajax post 呼び出しを強制した場合)。
  • 5 回目の試行が失敗した場合、そのアカウントは 10 分間ブロックされます。

セキュリティ上の弱点はありますか?

私はそれを見つけましたが、それを修正する方法がわかりません。

失敗した試行が「x」であり、recaptcha が必要な場合、ユーザーは「ログイン ページ」リンクをクリックして (更新ではなく)、recaptcha なしでフォームを見つけることができます (試行が 0 であるため)。セッション変数「試行」を作成できますが、これは ajax 呼び出しと同じように強制することができますよね?

あなたの助けを前もって感謝します

4

2 に答える 2

2

セキュリティ上の問題の 1 つとして、ロボットがランダムなメールとパスワードを作成し、ログインし続ける場合があります。メールは毎回異なるため、同じ「ロボット」であるかどうかわからず、Web サーバーがビジー状態になり、速度が低下します。 .

これを解決するには:

  1. いつでもCAPTCHAを持つことができます
  2. 発信者 IP を取得し、メールではなく IP に基づいてルールを適用できます。この IP を数回試行すると、ファイアウォールでブロックできます。
于 2013-05-12T05:49:43.960 に答える
1

このようなスキームの最大の問題は、IP アドレスではなくユーザーをブロック (またはキャプチャ) していることです。これは脆弱性を開き、ブルート フォーシングを停止しません。

  1. ブルート フォース ボットは、CAPTCHA やブロックなしで、アカウントごとに 2 つの推測を行うことができます。そのため、ボットはシステム上のすべてのアカウントで「パスワード」と「123456」を試行し、おそらく 2% の確率で成功します。このボットがすべてのアカウントで 2 つの推測を取得するずっと前に、このボットを停止したいと考えています。特に、CPU の点でかなり高価な bcrypt を使用している場合。
  2. 悪意のあるいたずら者は、10 分ごとに 5 回、そのユーザーとしてログインを試みるだけで、メール アドレスを知っているユーザーをロックアウトできます。

IP アドレスのブロックには、独自の誤検知と誤検知のセットが伴うことに注意してください。正当なプロキシ サーバーとボット ネットは、IP アドレスをブロックすると問題が発生する可能性があることを意味します。ブルートフォース問題の 90% を解決します。

CAPTCHA には、独自の偽陽性と偽陰性のセットも付属しています。大量の ReCAPTCHA 画像を読み取るのに苦労していることはわかっていますし、ボットが私のシステムを攻撃して ReCAPTCHA を私よりもうまく解決しているのを見たことがあります。CAPTCHA が顧客に与えるプラセボ効果を除けば、CAPTCHA を気にする必要はもうありません。

あなたは言う:

ユーザーは「ログインページ」リンクをクリックして (更新ではなく)、recaptcha なしでフォームを見つけることができます (試行が 0 であるため)

どうしてこれなの?試行回数がデータベースに保存されている場合、そのリンクをクリックすると試行回数が変わるのはなぜですか?

試行回数には自動タイムアウトがありますか? ログインに成功するとリセットされますか?

ブルート フォース ボットは、セッションベースのブロックを実装した場合でも、気付かない可能性があります。セッションは Cookie に基づいており、ログイン フォームがセッションから何かを要求しない限り、ボットはログイン後までその Cookie を送信しません。必要な場合でも、ボットは、その Cookie を送信しないことで、ブロックされていない新しいセッション Cookie をいつでも取得できます。

于 2013-05-12T08:38:50.867 に答える