私はサイトで作業していますが、ユーザー名の列挙を防ぐためにユーザー登録ページにCAPTCHAを追加したいと考えています。
私は、CAPTCHAを登録ページに追加しないでください。これはユーザーの負担であり、コンバージョン率が低下するため、フロントエンドの開発者と協力しています。
サイトのセキュリティとサイトのユーザビリティの間には時々逆の関係があり、一部のセキュリティの脆弱性は他のものよりも悪いことを知っています。
SQLインジェクションの脆弱性のようなものがあった場合、私はそれを修正すると主張しますが、ユーザー列挙の脆弱性がこの特定の修正のために戦うことを正当化できるほど深刻かどうかはわかりません。
CAPTCHAを登録ページに配置することはどれほど重要ですか。また、ユーザー列挙攻撃をどれほど深刻に行う必要がありますか?
ReCAPTCHA(広く最高の1つと見なされています)での私の個人的な経験は、追加を試みてから、スパマーが防止するために試みていたスパマーが解決方法を見つけるまでに、約1週間かかったことです。
彼らは提示された画像の100%を正しく解決しませんが、そうする必要はありません。 10分の1に1つでも正解しても問題はなく、彼らはそれよりもうまくやっています。彼らはおそらく私たちの顧客よりもうまくやっています。
CAPTCHAには、ゲームをプレイしたり、いくつかの画像から子猫の写真を選択したりする方法がいくつかあります。これらのタイプのCAPTCHAは、熱心なスパマーからまだ真剣な注目を集めていません。
サイトの設計によっては、ユーザー列挙は解決できない問題である可能性があります。フォーラムの場合、攻撃者は単にフォーラムにアクセスし、すべての投稿に添付されているユーザー名をメモするだけです。
誰かがサイトに登録できる場合、登録プロセスでは、選択した名前がすでに使用されていることを潜在的なユーザーに通知する必要があります。 CAPTCHAは、攻撃者の方程式を変更する可能性があります。これを解決するためのコストと、列挙された資格情報の潜在的な値と比較した失敗率は、努力する価値がないことを意味します。
ユーザー名は通常、資格情報ペアの秘密でない部分であるため、ユーザー名を特定することは、通常、攻撃者にとってあまり価値がありません。
ser enumeration については、次の方法で人間による確認なしにこの特定の脅威を軽減できます。
ログインユーザー名を他のユーザーの詳細から切り離します(メールアドレス、仮名識別子、公開されている「自己紹介」属性)。銀行はこれを行うために、他の番号やアカウントの詳細から完全に切り離されたログイン番号を顧客に提供します。例えば:
システム内のユーザーに関する情報を推測できる任意のパブリッククエリまたはフォーム上にあります:
認証に使用されるすべてのフィールドには、パスワード自体と同じ制限があります。
代替の非正統的なアプローチは、ログインユーザー名を持たないことです.
アカウントは、パスワードのみを使用して作成およびアクセスされます。したがって、誰かが自分のアカウントにログインしたくない場合は、できるだけ長くランダムなパスワードを使用することをお勧めします。システム内のユーザーの名前は、認証ではなくメンバーの対話に使用されます。
ほとんどのユーザー名はエントロピーを少しだけ追加するだけなので、ログインユーザー名とパスワードの両方を総当たり攻撃するよりも安全です。パスワードさえあれば、メンバーはより直感的に認識できます。モニターの付箋にユーザー名/パスワードのペアを記録する人々は、これらのデータ属性のペアは2つ以上の断片に任意にスライスされた原子認証ユニットにすぎないという本質的な真実を明らかにしています。 "Number A; Number B; Number C; Number D; and Number E"というラベルの付いた5つの入力ボックスを持つログインフォームは、 "ユーザー名;およびパスワード"。
これはまた、この日の年齢でのパスワードの回復は、ウェブサイトではなくユーザーの責任である可能性があり、おそらくそうすべきであるという単純な点を作り出します。電子メールアドレスを事実上のポストホックパスワードマネージャーとして使用すると、すべてのサイトのセキュリティが「秘密の質問/回答応答」にあるエントロピーにまで縮小され、その電子メールアカウントのパスワードを回復またはリセットします。また、電子メールアカウントは、ハッカーにとって、他の場合よりもはるかに魅力的なターゲットになります。電子メールアドレスは、特にネットワーク上で秘密に設計されたことはありません。