web-dev-qa-db-ja.com

Cookie内にユーザーIDではなくセッションIDを保存するのはなぜですか?

セッションIDからユーザーIDを2回抽出するのではなく、他のユーザー情報を抽出するために1回だけデータベースを検索するように、セッションIDの代わりにユーザーIDを保存する方がいいのではないでしょうか。

4
Dodz

悪意のあるユーザーが送信するIDを変更する可能性があるため、これは非常に悪い考えです。

たとえば、管理者がID 1、およびユーザーのID 101、そのユーザーはCookie内のIDを1、つまり管理者権限を取得します。

同じ理由で、このデータを信頼できないため、Cookieで他の関連データを送信することは望まないでしょう(データが署名されていないため、jwtを使用して変更できない場合など)。

もちろん、ランダムなユーザーIDを生成することもできます。しかし、これらが推測不可能であると仮定しても、これには問題があります。これは、パスワードをCookieで送信する場合と基本的に同じです。 IDが一度でも漏洩すると、攻撃者は取り消すことができないため、永続的なアクセス権を取得します。一方、セッションIDはしばらくすると期限切れになるか、取り消されます。

3
tim

セッションIDは頻繁に変更する必要があるため、ユーザーIDはデータベース内の定数値であり、Cookieでセッショントークンを処理するために必要な値ではありません。

@AndrolGenhaldが述べたように、データベース内のユーザーIDは、新しいユーザーで単純に増加する数になる可能性が高いため、おそらく簡単に予測できます。一方、セッションIDはエントロピーが高いため、セッションIDの値を推測することは非常に困難です。

1
Joe