Cookie
Webサーバが、ブラウザに小さなデータを保存させ、次からのリクエストで送り返させる仕組み。ログイン状態の維持などに使われる。Secure属性を付けたCookieは、HTTPSの通信でだけ送られる。
イマシルちゃんの解説
Webサイトは、じつは、毎回「はじめまして」の状態なんだ。
前に来た人かどうかを、自分では覚えていられないんだよ。
そこで、サイトが「この番号札を持っていてね」って、ブラウザに小さなメモを預けるんだ。
次に来たとき、ブラウザがそのメモを見せると、「あ、さっきの人だね!」ってわかるんだよ。
ただ、このメモを盗まれると大変だから、メモの扱い方を決めるルールもあるんだ。
より深い解説
定義
Cookieは、RFC 6265で定められた、HTTPで状態を管理する仕組みである。サーバは、応答の Set-Cookie ヘッダーで名前と値をブラウザに保存させ、ブラウザは、条件に合うリクエストの Cookie ヘッダーで、その値を送り返す。HTTPは、もともと前のリクエストの状態を覚えない(ステートレスな)プロトコルなので、ログイン状態やショッピングカートの中身を維持するのに使われる。
(応答)Set-Cookie: SID=a8f3...; Secure; HttpOnly; SameSite=Lax; Path=/; Max-Age=3600
(以降のリクエスト)Cookie: SID=a8f3...
主な属性
| 属性 | 働き |
|---|---|
| Secure | URLのスキームが https のときだけ、ブラウザがCookieを送る。暗号化されていない通信で盗聴されるのを防ぐ |
| HttpOnly | JavaScriptからCookieを読み出せないようにする。XSSでCookieを盗まれるのを防ぐ |
| SameSite | ほかのサイトから送られるリクエストに、Cookieを付けるかを決める(Strict、Lax、None)。CSRFの対策になる |
| Expires、Max-Age | 有効期限。過ぎるとCookieは無効になる。指定しないと、ブラウザを閉じるまでの一時的なCookieになる |
| Domain | Cookieを送る先のドメインの範囲 |
| Path | URLのパスが、指定したパスで始まるときだけ送る |
セキュリティ上の注意
| 注意点 | 内容 |
|---|---|
| セッションIDの保護 | セッションIDを入れたCookieには、Secure と HttpOnly を付ける |
| Domainを広げすぎない | Domainを指定すると、サブドメインにも送られる。不要なら指定しない |
| 重要な情報を入れない | Cookieの値は、利用者が見たり書き換えたりできる。パスワードなどを入れない |
プライバシーの面
ほかのサイトに埋め込まれた広告などが発行するCookie(サードパーティCookie)は、多くのサイトをまたいで利用者を追跡するのに使われてきた。このため、主要なブラウザでは、サードパーティCookieを制限する動きが進んでいる。