1

Rails 3.0 アプリで Devise を使用していますが、現在、確認可能および回復可能がオンになっています。これらのモジュールは、ユーザーが自分の電子メール アカウントを確認する必要があり (確認可能)、ユーザーが自分の電子メール アカウントに電子メールを送信してパスワードをリセットできるようにします (回復可能)。

残念ながら、ユーザーが自分のアカウントを確認せずにサイトを使用できるようにする合理的なセキュリティ ポリシーを "考案" (しゃれを意図したもの) するのは困難でした。セキュリティのために次の要件を適用します。

  1. アカウントを確認するには、サインインまたはサインインする必要があります。これが当てはまらず、ユーザー A が悪意のあるユーザー B の間違った電子メール アドレスを誤って入力した場合、B は確認用の電子メール リンクを受け取り、自動的にサインインし、そこからパスワードをリセットできます。 「パスワードリセットリンクのメール」経由。A の資格情報でサインインするよう B に要求すると、この可能性がなくなります。

  2. メールでパスワードをリセットするには、確認済みのメールが必要です。これは、ユーザー A が悪意のあるユーザー B に属する間違ったメール アドレスを誤って入力した場合、B は確認メール リンクを受け取り、A がアカウントにサインアップしたことを知るためです。したがって、B はサイトにアクセスし、パスワードのリセット機能を使用してアカウントのパスワードを変更し、その後自分のアカウントを確認できます。確認済みの電子メール アドレスを要求すると、この可能性がなくなります。

だから、すべてが順調です。ユーザー A がアカウントを作成し、まだアカウントを確認せず、サイトに戻ってパスワードを忘れた場合を除きます。ここで、A は依存関係の循環ループに陥っています。パスワードをリセットするにはアカウントを確認する必要がありますが、アカウントを確認するには忘れたパスワードでサインインする必要があります。

考えられる解決策は次の 2 つです。

  1. サインイン直後にアカウントを確認するようにユーザーに要求します。これにより、サインアップの手間が増えますが、循環依存は解消されます。

  2. ユーザーがアカウントを確認せずにパスワードをリセットすることを許可しますが、ユーザーがアカウントを確認する前に機密情報を入力したり、重要なアクションを実行したりすることは許可しません。このように、悪意のあるユーザー B によるアカウントのハイジャックは引き続き可能ですが、貴重な情報や権限なしでアカウントを制御できます。

より良い解決策はありますか?企業はこの問題にどのように対処していますか?すぐにメールで確認する必要のないサイトをいくつか使ってきたので、#2 のような複雑な実装を必要としない方法でこれを行うことができればいいと思います。

ありがとうございました!

4

1 に答える 1

0

ユーザーが認証されているが、確認されていない一種のロールを作成します。アカウントの変更 (パスワードや電子メール アドレスのリセットなど) を行う前に、ユーザーにアカウントの確認を要求することは不合理ではありません。

ここでの秘訣は、ユーザーがログインせずにアカウントを確認できるようにすることだと思います。ユーザー A が間違った電子メール アドレスを入力した場合、あなたは何を期待できますか? 最初に正しいメールアドレスを入力できるように最善を尽くしてください。これは、ユーザーにとって許しがたい罪です。ユーザーは、自分の電子メール アドレスを入力する方法を知っている必要があります。彼らがメールを受信できず、間違ったアカウントを使用した場合、最後の手段は、技術サポートを行ったり、アカウントを回復できるようにセキュリティに関する質問をしたりすることです。

メールの「確認」リンクをクリックすると、ログインするように求められます。簡単です。「アカウントを確認していただきありがとうございます。ログインしてください。」特に機密情報を含む「プロファイル」を持っている場合は、セキュリティ上の問題になる可能性があるため、自動的にログインしないでください。

未確認のユーザーがパスワードを忘れたシナリオ。最初にアカウントを確認する必要があることを伝え、メールの再送信を申し出ます。その後、メールでパスワードをリセットするオプションを提供します。不格好ですが、なぜこれを経なければならないのかを説明すれば、おそらくユーザーは理解してくれるでしょう。彼らはすべての情報を忘れているので、あなたに厳しすぎるべきではありません.

于 2013-07-31T18:51:39.790 に答える