見えるセキュリティ
セッション管理
SESSION MANAGEMENT
この概念とは?
セッション管理とは、Webアプリが利用者のログイン状態などを継続して扱うために、利用者とServer側のSessionを対応付けて管理する仕組みです。一般的なServer-side sessionでは、ServerがSessionを作成し、そのSessionを識別するSession IDをCookieとしてBrowserに保存します。対象となるその後のリクエストでBrowserがSession IDを送ることで、ServerはどのSessionに対応する利用者からのリクエストなのかを判断できます。
Webアプリは、一度ログインしただけで利用者を自動的に覚え続けているわけではありません。Browserが対象となるリクエストでSession IDを送り、ServerがそのSession IDに対応するSessionを探すことで、ログイン状態や利用者を継続して識別します。
- THEME
- auth
- KIND
- mechanism
- REVIEW
- self-reviewed ·
Session ID CookieとServer側のSessionでログイン状態を継続する流れ
この教材では、Server側でSessionを管理し、Session IDをCookieでやり取りする一般的なWebアプリの基本形を扱います。Cookieのセキュリティ属性やセッションを狙った攻撃、JWTなどの別方式については、今後の発展教材で扱います。
- 現在のSTEP
Browser
利用者の操作を受け取り、Cookieを保存して送る
持ち物
—
- 現在のSTEP
Server
利用者を認証し、SessionをServer側で管理する
持ち物
- ログイン情報:ID / Password
1. Clientがログイン情報を送る
利用者がログインすると、BrowserはID・パスワードなどの認証情報をServerへ送ります。Serverは受け取った情報を使って、利用者が本人かどうかを確認します。
技術的な詳細を見る
実際の認証方法はWebアプリによって異なります。この教材ではID・パスワードによる認証を例にしますが、パスワードの保存方法や認証処理そのものは扱いません。
STEP 1 / 6: Clientがログイン情報を送る
この概念の要点
要点
Sessionの実体はServer側にある
一般的なServer-side sessionでは、ログイン状態などのSession情報はServer側で管理します。BrowserにはSessionそのものではなく、そのSessionを識別するためのSession IDを持たせます。
要点
BrowserはSession IDをCookieとして送る
Serverから受け取ったSession IDはCookieとしてBrowserに保存され、条件に一致する次のリクエストでServerへ送られます。
要点
ServerはSession IDから利用者を特定する
Serverは受け取ったSession IDを使って対応するSessionを探します。有効なSessionが見つかれば、そのSessionに紐づく利用者からのリクエストとして処理できます。
要点
ログアウトではServer側のSessionを無効化する
ログアウトするときは、Browser側のCookieを削除するだけでなく、Server側のSessionも無効化することが重要です。
理解確認
参考資料
- NISTNIST SP 800-63B-4: Session Management
NIST SP 800-63B-4認証後のSession継続・Session Cookie・ログアウトの要件
- OWASPSession Management Cheat Sheet
Session IDの生成・Server側管理・無効化の実装指針
- RFCRFC 6265: HTTP State Management Mechanism
RFC 6265Set-CookieとCookieによる状態管理の仕様