Cookie

Web サーバーがブラウザに保存を指示し、リクエスト間で状態を維持する仕組み

Webセキュリティ
Cookie」の技術書を見る →

Cookie は、Web サーバーがブラウザに保存を指示し、以降のリクエストでブラウザが自動送信する小さなデータ片 (最大 4KB) である。HTTP はステートレスなため、Cookie でセッションを維持する。

Cookie の属性を以下にまとめる。

属性説明
HttpOnlyJS からアクセス不可 (XSS 対策)
SecureHTTPS でのみ送信
SameSiteクロスサイトでの送信を制御
Max-Age有効期限 (秒)
PathCookie が送信されるパス
DomainCookie が送信されるドメイン

Cookie の設定を図で示す。

Set-Cookie: session=abc123; HttpOnly; Secure; SameSite=Strict; Max-Age=86400; Path=/

Cookie と localStorage vs JWT の違いを以下にまとめる。

観点CookielocalStorageJWT (Bearer)
送信自動手動 (JS)手動 (JS)
XSS 耐性HttpOnly を付ければ JS から読めないJS から読めるため持ち出される保存先が JS から読めるため持ち出される
CSRF 耐性自動送信されるため SameSite の指定が必要自動送信されないので影響を受けない自動送信されないので影響を受けない
サイズ4KB5MB保存先の上限に従う。ヘッダーへ載せるため、サーバー側のヘッダー上限にも収める
サーバーレスドメインをまたぐと設定が増える単体では認証に使えない検証に状態を持たずに済み相性が良い

SameSite の値

SameSite の値を以下にまとめる。

クロスサイト送信用途
Strict送信しない銀行、管理画面
LaxGET のみ一般的な Web アプリ (デフォルト)
None送信する。Secure の指定が必須クロスサイト API

サーバーレスでの推奨

サーバーレス API では Cookie よりも JWT (Bearer トークン) が推奨。Cookie はステートフルなセッション管理が必要だが、JWT はステートレスで Lambda と相性が良い。

Cookie の関連書籍も参考になる。

この記事は役に立ちましたか?

関連用語

関連する記事