web-dev-qa-db-ja.com

不明なユーザー名またはメールアドレスを入力したことをユーザーに知らせる必要がありますか?

私のWebサイトには、ユーザーがパスワードを忘れた場合に使用できるパスワードリセットページがあります。このページでは、ユーザー名またはメールアドレスを入力して[リセット]をクリックすると、パスワードをリセットするためのリンクが送信されます。

ユーザーが間違ったユーザー名またはメールアドレスを入力した場合、それがシステムに存在しないこと、またはセキュリティ上のリスクであることを知らせますか?

23
AlexFoxGill

答えは、一般的にはそれによって異なります。これは実際にはシステムのセキュリティに基づいています。

ユーザーは制限なしに新しいアカウントを作成できます

もしそうなら、それをしないことは意味をなさないのです。ユーザー名またはメールアドレスを交差させることはできないため、ユーザー名またはメールアドレスがすでに使用されている場合は、新しいユーザーに通知する必要があります。攻撃者は、新しいユーザー登録システムを攻撃することにより、ユーザー名と電子メールを入手することができます。パスワードを忘れた場合のセクションで同様の攻撃の場を提供しても、この方法は他の場所に存在するだけなので、セキュリティを損なうことはありません。登録システムで使用する制限が、パスワードを要求するための制限(つまり、使用するアンチスパムシステム)と同じであることを確認してください。

ユーザーは制限なしに新しいアカウントを作成できません

招待のみのシステムを検討してください。登録を許可される唯一の方法は、誰かがそれを承認した場合です。これは、管理者が初期のユーザー名、電子メール、およびパスワードを(場合によっては手動で)設定する場合です。このシステムでは、入力した情報が正しいかどうかをユーザーに通知しないことで、セキュリティを確保できます。ユーザー名と電子メールは、弱く保護された秘密として扱われる可能性があります。

全体

これはユーザビリティへのヒットであることに注意してください。誰かが自分のメールアドレスを間違って入力した場合、彼らは自分がそうしたことに気付かないかもしれません。ウェブサイトからのメールはすぐに届くとは限らないため、ユーザーは決して届かないメールを待っている可能性があります。

24
William Forcier

「そのユーザー名は存在しない」と「そのユーザー名は存在するがパスワードが間違っている」を区別するnotの古い伝統があります。それは、攻撃者と防御者の両方が仕事で新しいものであり、コンテキストが異なっていた昔から来ています。当時、攻撃者は「外」にいて、メインフレームに入るには、ユーザー名とパスワードのペアを推測したいと考えていました。その当時、パスワードは今日よりもさらに貧弱であり、ユーザー名を秘密にしておくことは実質的に役立つと考えられていました(「攻撃者は、私たちに「smith」という名前のユーザーがいるとは決して推測しません!」)。

興味深い読み物は 1988年の「モリス」ワームのこの説明 です。その獣は、制御なしで狂ったように複製するすべてのワームインスタンスによって消費される膨大な帯域幅によって、インターネット全体(今日よりも小さい)を破壊しました。ワームはさまざまな方法でシステムに侵入する可能性があり、その1つがパスワードの解読です。興味深いことに、このワームは最初に「.forward」ファイルを含むさまざまなソースからアカウント名を収集し、次に(そしてその後のみ)432語の辞書を試します。これは2つのポイントを示しています。

  • アカウント名は秘密ではありません。これらはターゲットシステムにのみ存在するわけではありません。また、(現代では)SSH構成ファイル、アドレス帳など、他のマシンのさまざまなデータ要素から推測することもできます...

  • 1988年には、強力なパスワードを選択するのが非常に悪かったのです。

時が変わった。特に、他の人が指摘したように、多くの最新システムでは自動登録が可能です:anybodyはログインを試み、特定のアカウント名が「無料」かない。他の多くのターゲットシステムでは、アカウント名の収集が可能です(たとえば、Webフォーラムでは、投稿者の疑似アカウント名を使用できます)。これにより、ユーザー名の機密性への依存がかつてないほど軽薄になります。一方、平均的なユーザーがより強力なパスワードを選択することを期待することもできます(そうしないと気が滅入ると思います)。正味の影響はバランスの変化です。アカウント名を秘密にしておくという伝統は、その関連性のほとんどを失っています。

ただし、、伝統は強い力です。システムから「そのユーザー名は存在しません」というエラーと「パスワードが正しくありません」という別のメッセージが返された場合、一部のユーザーは緊張してスキャンダルに陥り、無責任について不満を抱く可能性があります。ジョーの名前はジョーです。これが問題にならない理由を合理的に論じ、提示することができます(上記を参照)。一部は納得できないままになります。これは、ユーザーがcustomersの場合は良いことではありません。とにかく、これは時間がかかりすぎます。実際には意味がなくても、古い伝統を維持する方が簡単です。人間のユーザーの基本的な非合理性に対処する方法としてそれを見ることができます。

8
Tom Leek

いいえ、ユーザー名が存在しない場合は攻撃者にアカウント名を発見させ、クラックを試みる可能性があるため、ユーザー名を知らせないでください。一般的な「リセットメールが送信されました。受信トレイを確認してください。」を送信した場合アカウントが存在しない場合でも、攻撃者が得ることは何も試みません。

4
GdD

セキュリティに関して最も重要なのは、攻撃者が特定のIDまたは電子メールアドレスがサイトにアカウントを持っているかどうかを知ることによって何が得られるかです

たとえば、プライバシーの問題と見なされる可能性のあるビジネスを行っている場合、またはサイトのアカウントを使用してお金を費やすことができるか、または本質的な価値を持っているか(つまり、フィッシングから何かを得ることができるかどうか)地点)。一部のサイトではこの種の問題は発生しません。たとえば、マイクロブログプラットフォームやOSNはとにかくページにIDを表示するので、存在しないIDを入力したことをユーザーに知らせると便利です。

ユーザビリティの観点から、IDが存在するかどうかをユーザーに知らせないのは悲惨です。 IDを使用するWebサイトは、少なくともIDを確認する必要があります(IDはサイトに固有なので、スパマーには多くの情報を提供しません。 )。ユーザーにメールアドレスを知らせないのもひどい考えです。ユーザーは、各メールアドレスに使用したすべての可能なパスワードを再入力する必要があります。

ユーザーがウェブサイトにアクセスする頻度を自問してください。アクセス頻度が低いと、使いやすさの問題が大幅に拡大し、従来のテキストではなくテキストまたは電子メールで送信されるワンタイムパスワードを有効にすることができます。ログインフォーム、年に数回しか接続しない人向け。

たとえば、私は仕事で2つの異なるアドレス、異なるサブシステム用の複数のパスワード、およびばかげたパスワードリセットポリシーを持っています。その上に、個人の電子メールアドレスと大量の異なるパスワードがあります。私があまりアクセスしないサイトに適したメール/パスワードの組み合わせを見つけるには、何十回もの試行が必要になる場合があります。

@ William Forcierによって指摘されたように、電子メールがいくつかの方法で使用されているかどうかについての知識を得ることができます

  • アカウント作成フォーム
  • ログインフォーム
  • パスワードを忘れた場合のフォーム

ただし、フォームごとに異なる防御策を展開することもできます。電子メールアドレスを完全に非表示にする必要があると判断した場合は、作成が多すぎた後、特定のIPアドレスへの(CAPTCHA)アカウントの作成をブロック/複雑化することができます。おそらく、とにかくスパムアカウントから保護するメカニズムが必要になります(ただし、CAPTCHAを体系的に提供するなど、使用できないソリューションによって実際のユーザーの生活を台無しにしないように注意してください)。

3

私が言及したことのない1つの側面は、ユーザーが所定のサイトに登録しようとする前にユーザーの希望する名前が付けられたため、多くのログインの問題が発生するという事実です。 「JSmith」がログインしようとしてログインできない場合、彼が本当に知りたいのは、サイトに「JSmith」という名前のアカウントがあるかどうかではなく、サイトにアカウントがあるかどうかです彼のためにという名前JSmith。サイトにユーザーに関連付けられた公開情報(アバター画像など)があり、そのような情報を自由に照会できる場合、JSmithのアカウントが存在するかどうかを示すだけでなく、それに関連付けられたいくつかの情報も表示すると役立つ場合があります。ジャックスミスが常に猫をアバターとして使用し、JSmithの下でログインしようとしたときに犬が表示された場合、問題はパスワードを忘れていないことではないので、「フォールバック」の1つを試す必要があります。 「パスワードを忘れた」リンクではなく、ユーザー名。

2
supercat