セッションセキュリティ
このドキュメントの目的
Webアプリケーションにおけるセッション管理のセキュリティリスクと、安全な実装方法を学びます。
セッション管理の基本
セッションとは
HTTP はステートレスプロトコル
↓
ユーザーの状態(ログイン状態等)を維持する仕組みが必要
↓
セッション管理
セッションID: ユーザーを識別するための一意な識別子
セッションデータ: ユーザーに紐づく情報(サーバー側で保持)
セッションが払い出されるまでの流れ
┌──────────┐ ┌──────────┐
│ ブラウザ │ │ サーバー │
└────┬─────┘ └────┬─────┘
│ │
│ 1. サイトにアクセス │
│ ────────────────────────────────────>│
│ │
│ 2. セッションID生成
│ (abc123) │
│ │
│ 3. Set-Cookie: session_id=abc123 │
│ <────────────────────────────────────│
│ │
│ ┌────────────────────────────────┐ │
│ │ Cookieに保存 │ │
│ │ session_id=abc123 │ │
│ └────────────────────────────────┘ │
│ │
│ 4. ログインフォーム送信 │
│ Cookie: session_id=abc123 │
│ ────────────────────────────────────>│
│ │
│ 5. 認証成功 │
│ │
│ 【重要】 │
│ 6. セッションID再生成
│ abc123 → xyz789
│ ※固定攻撃対策
│ │
│ 7. 新しいセッションにユーザー情報を紐づけ
│ sessions[xyz789] = {user: "alice"}
│ (abc123は破棄)
│ │
│ 8. Set-Cookie: session_id=xyz789 │
│ <────────────────────────────────────│
│ │
│ 9. 以降のリクエスト │
│ Cookie: session_id=xyz789 │
│ ────────────────────────────────────>│
│ │
│ 10. セッションIDで
│ ユーザーを識別
│ → "alice"として処理
│ │
ポイント:
- 認証成功後にセッションIDを再生成する(ステップ7)
- これがセッション固定攻撃への対策
セッション管理の方式
| 方式 |
|---|