3

ハッシュ化されたパスワードを(サーバー側の)セッションのユーザーオブジェクトに保存することはお勧めできませんか?言うまでもなく、特定のユーザーを認証するためにハッシュを比較するには、ソルトおよびハッシュされたパスワードを取得する必要がありますが、比較が行われると、ユーザーオブジェクトにパスワードを保持することに関連する定量化可能なセキュリティリスクがありますか?


コメントでの議論を考えると、質問の要点は、パスワードとハッシュデータがユーザーオブジェクトに格納され、残りのユーザーデータが1回のクリーンな呼び出しでデータベースから取得されるとということでした。質問を投稿する前に、もちろんリスクがあることを理解しましたが、ユーザーからフレームワークをクリアするためのフレームワークを実装することを保証するのに十分実行可能ですか、それともそうすることは良い習慣になりますか?


応答を考えると、最善の解決策は、IDによってユーザーに関連付けられているが、直接保存されていないパスワードとソルトを含む資格情報オブジェクトを用意することです。

ユーザーがログインしようとすると、ユーザーオブジェクト(パスワードデータを含まない)が電子メール/ユーザー名によってデータベースから取得されます。次に、IDが読み取られ、関連付けられた資格情報オブジェクトを取得するために使用されます。その後、パスワードの検証を行うことができます。パスワードが正しい場合、ユーザーはセッションに参加し、資格情報オブジェクトは破棄されます。

その結果、パスワードデータのないユーザーオブジェクトが作成されるため、関連する潜在的なセキュリティリスク(質問で説明されているように、最小限に抑えられます)が回避されます。もう1つの結果は、使用前にユーザーオブジェクトからパスワードデータを手動でクリアする必要がないことです。これは、毎回データをクリアする必要があるよりも信頼性の高いシステムであり、EFまたは同様のテクノロジーが使用されている場合、オブジェクトの変更がデータベースにプッシュされるときに誤ってパスワードデータを消去するリスクはありません。

4

3 に答える 3

5

個人的にはそうしない理由は見当たらない。ソルトハッシュが安全である場合、サーバー側のセッションに保存することは、データベースに保存することよりも安全性が低くなることはありません。

結局のところ、優れたソルトハッシュを使用することの全体的なポイントは、データベースが危険にさらされ、誰かがソルトハッシュをすべて取得したとしても、実際のパスワードを回復できないということです。

于 2012-12-11T20:51:50.837 に答える
1

サーバーを信頼しているとすれば、それが過度に危険だとは思いません。

理想的なパスワードハッシュの場合、ハッシュのリークはそれほど重要ではありません。ソルトが露出していない場合、パスワードを回復することは事実上不可能です。ハッシュを構成するソルトと要素(パスワード以外)が公開されている場合、それは可能になりますが、レインボーテーブルは役に立たず、ブルートフォースが唯一の方法であるため、通常は実用的ではありません。SHA256やBcryptなどの強力なハッシュアルゴリズムを使用している場合は、それほど心配する必要はありません。

そうは言っても、見知らぬ人にパスワードハッシュを与えることは絶対にお勧めしませんが、サーバー上に保持しても、セキュリティへの影響はほとんどないはずです。

于 2012-12-11T20:52:21.940 に答える
1

セッションがクライアントサイトストレージ用にシリアル化されていない場合、これに関連する直接的な脅威はありません。ただし、ハッシュをセッションに保存する必要がある場合は、アプリの設計を改善するために認証/承認ロジックを修正する必要があります。

于 2012-12-11T20:52:42.177 に答える