2012-05-11 10 views
2

登録フォームには、AJAX呼び出しを使用してユーザー名が使用可能かどうかを確認する機能があります。AJAX確認ユーザー名機能のセキュリティ

それはかなりまっすぐ進む

  • ユーザ名のレコードが見つかった場合はそれ以外の場合は利用でき返し、リターンが取られ、データベース
  • に対する当社のサービス
  • チェックのユーザー名への呼び出しを行います。

ユーザーが数秒間入力を停止すると、サービスへの呼び出しが実行されます。

しかし、私たちの問題は、攻撃者がサービスに何らかの手段を使用して、すべてのユーザ名のリストをコンパイルできることです。

誰かがこの種の「攻撃」を防止する良い方法を知っていますか?

私が思いつくことができるのは、Captchaを前面に出すように要求していた唯一の人だが、これはユーザーエクスペリエンスが良くなくて、人々が私たちのフォームに記入しない可能性がある。

私たちは、まったく役に立ったら、ASP.NET MVC、C#、SQL Serverを使用しています。

ご協力いただきありがとうございます、ありがとうございます!

答えて

1

ユーザーに特定の数の要求のみを許可するか、各要求に0.5-1秒の待ち時間を追加することによって、レートを制限することをお勧めします。これらのいずれかを実行することにより、攻撃者が妥当な時間内にかなりの数のユーザー名を列挙するのがずっと難しくなります。

あなたのアプリケーションをより安全に保護する方法は、誰もがあなたのユーザーのリストを持っているかのように扱うことです。攻撃者がすべてのユーザーを知っていると仮定すると、ブルートフォース攻撃からどのように保護しますか?レート制限によるパスワード試行。 10分程度でパスワードの試行を数回行うだけで、アプリケーションのユーザーを大幅に保護することができます。

個人的には、「サッカーファン」のように、パスワード(「パスワード」や「クォーティー」など)が安全である必要があります。は安全なパスワードにしてください。どうして?あなたはすぐに "サッカーファン"を推測するつもりはないからです。あなたのブルートフォーザの辞書では100分の1になるだろうと推測していて、その金額の近くのどこかでログインしようとすると、彼らは禁止されなければならず、ユーザは通知を受けるべきでした。 (ところで、私は人々がそのようなパスワードを使うべきではないと言っている、より複雑な方が良い)。

+0

と呼ばれます。私は両方のあなたのアイデアが大好きです。 –

+1

こんにちはCais、多くのありがとう。あなたが見たことがない場合に備えて、私はパスワードセキュリティに関する私の個人的な信念と、その問題に取り組むためのよりよいアプローチと考えているものについてもう少し詳しく述べました。 – Tim

+0

私はおそらく誰かがダミーアカウントの1つでログインしようとした場合、私たちに通知されるというトリガーとともにかなりの数のダミーアカウントを追加することも考えていました。 通知を受け取ったら何をするのか分かりませんが、IPアドレスを試したIPアドレスを禁止しますか? –

1

あなたは、ajaxリクエストが同じ起源から来ていることを確認して、何らかのスロットルをそこに置くこともできます。リクエストに署名することもできます。

調整することによって、たとえば、1つのIPアドレスで1日あたり最大10個のリクエストが許可されます。

1

もう1つの方法は、クライアントに数秒かかる計算をさせることです。

サーバー側では、計算された値は非常に小さなCPUリソースで確認できます。クライアントによって計算された結果が正しい場合にのみ、要求が処理されます。

このようなアルゴリズムは、Trapdoor functions

+0

ありがとうロバート、私は間違いなくそれを探しているでしょう。 –

関連する問題