Rails 3.0 アプリで Devise を使用していますが、現在、確認可能および回復可能がオンになっています。これらのモジュールは、ユーザーが自分の電子メール アカウントを確認する必要があり (確認可能)、ユーザーが自分の電子メール アカウントに電子メールを送信してパスワードをリセットできるようにします (回復可能)。
残念ながら、ユーザーが自分のアカウントを確認せずにサイトを使用できるようにする合理的なセキュリティ ポリシーを "考案" (しゃれを意図したもの) するのは困難でした。セキュリティのために次の要件を適用します。
アカウントを確認するには、サインインまたはサインインする必要があります。これが当てはまらず、ユーザー A が悪意のあるユーザー B の間違った電子メール アドレスを誤って入力した場合、B は確認用の電子メール リンクを受け取り、自動的にサインインし、そこからパスワードをリセットできます。 「パスワードリセットリンクのメール」経由。A の資格情報でサインインするよう B に要求すると、この可能性がなくなります。
メールでパスワードをリセットするには、確認済みのメールが必要です。これは、ユーザー A が悪意のあるユーザー B に属する間違ったメール アドレスを誤って入力した場合、B は確認メール リンクを受け取り、A がアカウントにサインアップしたことを知るためです。したがって、B はサイトにアクセスし、パスワードのリセット機能を使用してアカウントのパスワードを変更し、その後自分のアカウントを確認できます。確認済みの電子メール アドレスを要求すると、この可能性がなくなります。
だから、すべてが順調です。ユーザー A がアカウントを作成し、まだアカウントを確認せず、サイトに戻ってパスワードを忘れた場合を除きます。ここで、A は依存関係の循環ループに陥っています。パスワードをリセットするにはアカウントを確認する必要がありますが、アカウントを確認するには忘れたパスワードでサインインする必要があります。
考えられる解決策は次の 2 つです。
サインイン直後にアカウントを確認するようにユーザーに要求します。これにより、サインアップの手間が増えますが、循環依存は解消されます。
ユーザーがアカウントを確認せずにパスワードをリセットすることを許可しますが、ユーザーがアカウントを確認する前に機密情報を入力したり、重要なアクションを実行したりすることは許可しません。このように、悪意のあるユーザー B によるアカウントのハイジャックは引き続き可能ですが、貴重な情報や権限なしでアカウントを制御できます。
より良い解決策はありますか?企業はこの問題にどのように対処していますか?すぐにメールで確認する必要のないサイトをいくつか使ってきたので、#2 のような複雑な実装を必要としない方法でこれを行うことができればいいと思います。
ありがとうございました!