web-dev-qa-db-ja.com

リンクを介してパスワードをリセットした後のユーザーのログイン

パスワードリセット機能のフローは次のとおりです。

  1. ユーザーは自分のアカウントに使用されているメールアドレスを送信します。
  2. 電子メールは、パスワードリセットハッシュのリンクを含むその電子メールアドレスに送信されます。
  3. クリックすると、ユーザーはパスワードをリセットできます。

パスワードのリセットが完了した後、ウェブサイトがユーザーをログインページにリダイレクトするのを確認しました。パスワードのリセットが完了した後、ユーザーを自動的にログインすることでセキュリティ上のリスクはありますか?

20
Dmitry Efimenko

違いはありません。ハッカーがリンクにたどり着いた場合、ハッカーはとにかくパスワードをリセットして再度ログインできます。それは彼に違いはありません、彼は機能をさらに乱用することはできません。

これを行うのが理にかなっているのは、何らかの形式の 多要素認証 を使用している場合だけです。もちろん、その場合は、リセットワークフローに多要素ビットを含めることもできます。

11
Manishearth

セキュリティの観点からは、「パスワードのリセット」が自動的にログインするかどうかはどちらかと言えば中立です。どちらの動作も、他の動作よりも本質的に安全ではありません。ほとんどのサイトは、サーバー側に実装するのが最も簡単だったと思います。

考慮すべき点は、セキュリティは誰もが協力している限り達成されるということです。特に 最小の驚きの原則 が最も重要です。セキュリティに適用されるこの原則は、人間のユーザーが期待するように物事が発生しないときに問題が発生していることを意味します。この場合、人間のユーザーはリセット後にログインすることを期待する場合としない場合があります。ユーザーが「驚いた」場合、どうなるか見てみましょう。

  • ユーザーがログインすることを期待していて、ログインしていない場合、パスワードを入力する必要があることに多少不満を感じるかもしれませんagain。しかし、結果はそこで止まります。特に、パスワードを3回入力しなければならないという要件は、ユーザーがパスワードを選択するときに、この3番目のエントリに気付かなかったため、ユーザーがより弱いが入力しやすいパスワードを選択するようには誘導しません。
  • ユーザーがしなかったパスワードのリセット後にログインすることを期待していてもisログインしている場合、そのユーザーは単にnot notnotであること彼はログインしていて、そのままです。これは、開いているセッションのユーザー制御と矛盾します(ほとんどのサイトに目立つ "ログアウト"ボタンがある理由)。

その意味で、(かなり弱い)ケースを作ることができますagainstパスワードのリセット時にユーザーを自動的にログに記録します。見過ごされたログインのセキュリティ結果は、予期しない自動ログインの欠如の結果よりも悪化する可能性があります。

14
Tom Leek

コードを書いているときはいつでも、「攻撃者がこの機能をどのように悪用することができるのか」と考えなければなりません。プログラマーはおそらく危険な機能を公開するため、この内部ダイアログがないことは非常に危険です。攻撃者の視点を完全に理解していないと、存在することのない脆弱性を調べることになります。

したがって、この場合:

攻撃者が自動的にログインすることでどのように利益を得ることができるのかafter彼らは被害者のアカウントのパスワードをリセットしました。この場合、明らかに被害はすでに発生しており、ユーザーを自動的にログインすることはあなたの心配事ではありません。

5
rook

おそらく、彼が正しいパスワードを選択したことを確認するだけです。サイトのパスワードページから離れて閲覧するとどうなりますか?

通常、パスワードを忘れた場合、ワンタイムトークンが生成され(多くの場合リンク)、パスワードを変更してログインできます。

彼らがワンタイムトークンを使用してすぐにログインし、その後パスワードを変更できる場合、それは少し奇妙ですが、完全に安全ではありません。結局のところ、パスワードを変更できれば、後から簡単にログインできます。

重要なことは、トークンを使用した後、トークンが無効化されているかどうかを確認することです。トークンを使用してパスワードを何度も変更できる場合は、実際にセキュリティの問題があります。

3
Lucas Kauffman

パスワードを変更すると、既存のログインセッションがすべてクリアされる可能性があるため、パスワードを持っている悪者もログアウトされます。

すぐにログインできない、または現在のセッションが保持されないという事実は、プログラマーの怠惰か、ルーカスが言ったことかもしれません。

2
copy

リンクがユーザー名情報を提供しない(そうすべきではない)、ユーザー名がユーザーの電子メールアドレスではない(そうすべきではないが、残念ながらそうである)と仮定すると、「誰か」のパスワードをリセットすることはできません。システムが自動的にログインしない限り、攻撃者にとってどのような利点もあります。再認証が推奨されるアプローチですが、リスクはシステムに必要なセキュリティに関連しています。

0
Chris

以前の回答では、セキュリティの観点から、パスワードリセットの完了後にユーザーが自動的にログインしているかどうかは関係ありませんが、これは実際にはパスワードリセットリンクに含まれているトークンの設計方法に依存しています。

パスワードリセットリンクに含まれるトークンは、必ず次の2つの情報で構成されます。

  1. パスワードをリセットする許可を与える情報を保持する必要があります。
  2. 参照を含めるか、この権限が有効なユーザーアカウントに何らかの方法で関連付ける必要があります。

ここで、2番目の側面、つまり「ユーザーアカウントへの参照」がトークンによってどのように伝えられるかによって、パスワードのリセット後にユーザーが自動的にログインするかどうかが実際に異なります。

攻撃者が何らかの方法でパスワードリセットリンクを含む電子メールを傍受したと仮定します。

Ifトークンは関連付けられたユーザーアカウントに関する情報、より正確にはユーザー名を明らかにしませんandシステムはパスワードのリセット後に自動ログインしませんその後リンクを持っている攻撃者は、このリンクでパスワードをリセットできるだけですが、ユーザー名がまだ知られていないため、システムにアクセスできません。パスワードをリセットした後、攻撃者はログインページにリダイレクトされます。攻撃者はユーザーが入力したユーザー名を入力する必要があります。これは、自分が盗んだリンクからは推測できません。ここで行われる唯一の損害は、パスワードの変更ですが、機密ではありません。データにアクセスしました。

対照的に、ifトークンには、攻撃者が抽出できるユーザー名の形式でユーザーアカウントへの参照が含まれていますthen実際、システムがthenが攻撃者にすでにログインし、システムの機密データにアクセスできる可能性のあるユーザー名(リンクから推測)を知っているため、パスワードのリセット後の自動ログイン。

0
B12Toaster