Cookie 属性と安全な管理 - Cookie セキュリティ
Cookie の属性(HttpOnly, Secure, SameSite)を正しく設定し、セッションハイジャックや CSRF を防ぐ。
概念図
実例
最も厳格な Cookie 設定例
bash
Set-Cookie: sid=xyz; HttpOnly; Secure; SameSite=Strict; Path=/; Max-Age=3600クロスサイトで送信が必要な場合(SameSite=None には Secure が必須)
bash
Set-Cookie: token=abc; Secure; SameSite=None; Path=/主要な Cookie 属性
HttpOnly: JavaScript からの
document.cookieによるアクセスを禁止する。XSS による Cookie 窃取を防ぐ最も重要な属性Secure: HTTPS 通信時のみ Cookie を送信する。HTTP での盗聴を防止
SameSite: クロスサイトリクエスト時の Cookie 送信を制御する
Strict: クロスサイトでは一切送信しない(最も安全だがユーザビリティに影響)Lax: GET リクエストのみ許可(デフォルト。多くのケースで推奨)None: 常に送信(Secure属性が必須。サードパーティ Cookie 用)
Path: Cookie を送信するパスを限定する
Domain: Cookie を送信するドメインを指定する。省略するとサブドメインには送信されない
Max-Age / Expires: Cookie の有効期限を設定する。セッション Cookie は省略時にブラウザを閉じると削除される
よくある設定ミス
- セッション ID を格納する Cookie に HttpOnly が未設定 → XSS で窃取可能
- Secure 未設定で HTTP 通信時に Cookie が平文送信される
- SameSite 未設定で古いブラウザが
Noneとして扱い CSRF に脆弱になる - Domain を広く設定しすぎて、サブドメインの脆弱なアプリから Cookie を読み取られる
- Max-Age が長すぎてセッション固定攻撃のリスクが高まる
