web-dev-qa-db-ja.com

「パスワードを忘れた」ページのベストプラクティス

「パスワードを忘れた」ページで、「このアカウントは存在しません」というメッセージを表示するためのアカウントを持っていない場合に適していますか?または、セキュリティ上の理由から、メールが送信されなかった場合でも、成功メッセージ(「パスワードのリセットプロセスが記載されたメールを受信しました」)を表示する必要がありますか?

5
nramirez

これに対する答えは、サイトの性質によって異なります。 UXの利点は、提供された情報が正しいかどうかをユーザーに知らせることであると思いますが、それはセキュリティに影響しない場合に限られます。

ユーザー名を列挙できるサイトはたくさんありますが、いくつかの方法があり、それらは設計上そうです。たとえば、Twitterのユーザー名を列挙したい場合は、ユーザーのページが http://www.Twitter.com/username にあるかどうかを確認することで簡単に列挙できます。それができなかったとしても、Twitterはユーザーのリストにアクセスするためのすてきな小さなAPIを提供します。

ただし、これは明らかに、本質的に少しでもデリケートなサイトでは機能しません。サイトがこのカテゴリに分類され、ユーザー名/メールを列挙する他の方法がない場合は、直感に従い、メールを送信するという一般的なメッセージを伝えます。

5
davis_m

セキュリティとプライバシーの観点から、次のことをお勧めします。

「アカウントが見つかった場合は、パスワードをリセットする手順が記載されたメールが送信されます。」

ただし、登録したメールアドレスやユーザー名がわからない場合は、明らかに役に立ちません。

ただし、ユーザーの利便性を少し犠牲にして、セキュリティとプライバシーを強化します。つまり、「そのアカウントは存在しません」のようなことは言わないでください。

1
Alex Arnold

アプリケーションの正規ユーザーは、メッセージを"パスワードのリセットプロセスが記載された電子メールを受信しました"として送信すると、混乱するかもしれません。

私の意見では、ユーザーの列挙を防ぐために、セキュリティの質問も追加できます。

生年月日をチェックするオプションや、ランダムな攻撃者が答えるのが難しいと思われる詳細を追加するようなものです。

不一致の組み合わせの場合、エラーメッセージが「不一致の組み合わせ」として表示されることを確認できます。それは攻撃者を混乱させます。しかし、本物のユーザーは、次の試みを使用する方法を見つけるでしょう。

総当たり攻撃を防止するために、CAPTCHAを有効にして、誤った試行の回数に基づいて、バランスの取れた一時的なロックを短時間実行することもできます。

0
the Injector

ユーザビリティの観点から、入力されたユーザー名/メールが見つかったかどうかに関係なく、一般的なメッセージを表示することは恐ろしいことです。どのユーザー名/メールを使用したかがはっきりわからない場合は、非常に迷惑です。

ただし、ユーザーがアカウントを列挙できないようにしながら、ユーザーフレンドリーにする簡単な方法があります。

ユーザー名とメールの両方のフィールドを提供し、そのうちの1つだけを要求します。メールアドレスを入力した場合は、必要な情報を記載したメールをそのアドレスに送信してください。ユーザー名を入力した場合は、そのユーザー名用に保存したアドレスにメールを送信します。

これにより、他のユーザーに対して誤ってパスワードのリセットメールをトリガーする可能性がありますが、それは大きな問題ではありません-結局のところ、メールには、パスワードをリセットできるフォームへのリンクが含まれているだけで、すぐにパスワードをランダムに変更することはできません。

0
ThiefMaster