Cookie
Web サーバーがブラウザに保存を指示し、リクエスト間で状態を維持する仕組み
Webセキュリティ
Cookie とは
Cookie は、Web サーバーがブラウザに保存を指示し、以降のリクエストでブラウザが自動送信する小さなデータ片 (最大 4KB) である。HTTP はステートレスなため、Cookie でセッションを維持する。
Cookie の属性
| 属性 | 説明 |
|---|---|
HttpOnly |
JS からアクセス不可 (XSS 対策) |
Secure |
HTTPS でのみ送信 |
SameSite |
クロスサイトでの送信を制御 |
Max-Age |
有効期限 (秒) |
Path |
Cookie が送信されるパス |
Domain |
Cookie が送信されるドメイン |
Cookie の設定
Set-Cookie: session=abc123; HttpOnly; Secure; SameSite=Strict; Max-Age=86400; Path=/
Cookie vs localStorage vs JWT
| 観点 | Cookie | localStorage | JWT (Bearer) |
|---|---|---|---|
| 送信 | 自動 | 手動 (JS) | 手動 (JS) |
| XSS 耐性 | HttpOnly で保護 | ❌ 脆弱 | ❌ 脆弱 |
| CSRF 耐性 | SameSite で保護 | ✅ | ✅ |
| サイズ | 4KB | 5MB | - |
| サーバーレス | △ | - | ✅ 最適 |
SameSite の値
| 値 | クロスサイト送信 | 用途 |
|---|---|---|
| Strict | ❌ | 銀行、管理画面 |
| Lax | GET のみ | 一般的な Web アプリ (デフォルト) |
| None | ✅ (Secure 必須) | クロスサイト API |
サーバーレスでの推奨
サーバーレス API では Cookie よりも JWT (Bearer トークン) が推奨。Cookie はステートフルなセッション管理が必要だが、JWT はステートレスで Lambda と相性が良い。
Cookie の関連書籍も参考になる。