用語辞典・プライバシー・認証

Cookie

Cookieとは

Cookieは、Webサイトがブラウザへ保存させ、次回の要求で同じサイトへ送る小さなデータです。一般にCookie(クッキー)と読みます。

サーバーがHTTP応答のSet-Cookieでname-valueと適用範囲を渡し、ブラウザーは後のmatching要求へCookieヘッダーとして自動添付します。ログインセッション、言語、買い物かご、セキュリティトークンなどに使います。

Cookieは「Webページが読む小さなファイル」とだけ考えないでください。ブラウザーが送信条件を管理し、要求ごとに自動送信するHTTP状態の仕組みです。

サーバーがSet-Cookieで値と適用範囲を渡し、ブラウザーが保存して、条件に合う次の要求だけへ添付する保存・選別・送信・サーバー側状態参照の往復
Webサーバーの応答から小さなname-valueトークンをブラウザーの保存領域へ入れ、ホスト・パス・期限・安全通信・スクリプト制限・サイト横断条件で選別し、次のmatching要求だけへ添付してサーバーのセッションデータを参照するピクトグラム図解

Set-Cookieから次の要求まで

name-valueの意味はアプリケーションが決める

Cookie仕様は値の業務的意味を定めません。サーバーは言語のような設定値、またはランダムなセッション識別子を入れます。セッションの本体をサーバー側データベースに置けば、ブラウザーへ個人データを直接保存せずに済みます。

Cookieはブラウザー利用者から見て変更可能です。価格、権限、アカウントIDを入れても署名・サーバー検証なしに信頼しません。

DomainとPathは送信範囲を決める

Domainを省略したhost-only Cookieは、設定したホストだけへ送ります。Domainを指定すると条件を満たすサブドメインにも送れるため、必要以上に広げません。

PathはURLパスによる送信範囲を絞りますが、別パスから値を絶対に読めないセキュリティ境界とは考えません。同じホストのアプリケーション間分離には別ホストを使います。

セッションCookieと永続Cookie

Expires・Max-AgeがないCookieは一般にセッションCookieとしてブラウザーセッション終了まで扱われます。永続Cookieは期限まで再起動後も残せます。

ブラウザーは容量管理や利用者操作で期限前に削除できます。「30日保持」をサーバー側の唯一のデータ保存保証にしません。

三つのセキュリティ属性を組み合わせる

SecureはHTTPSなど安全チャネルの要求だけへ送らせます。HttpOnlydocument.cookieなどスクリプトAPIからのアクセスを制限し、XSSでセッション値を直接読むリスクを減らします。

SameSiteはサイト横断文脈での送信を制御し、CSRF対策の一層になります。Strict、Lax、Noneの用途を選び、NoneにはSecureが必要な現行ブラウザー条件を確認します。

same-originとsame-siteは同じではない

オリジンはスキーム・ホスト・ポートの組、サイト判定はregistrableドメインなどを基にします。異なるサブドメインはcross-originでもsame-siteになり得ます。

Cookieはポートで隔離されず、一つのホストの別ポートへも送信対象になり得ます。Webアプリケーションの境界をCookieの直感だけで設計しません。

当事者と第三者は文脈の話

アドレスbarで開いたサイトと同じサイトのCookieを当事者文脈、埋め込み広告やwidgetなど別サイトの要求で使うものを第三者・サイト横断文脈と呼びます。

ブラウザーの追跡保護は第三者Cookieをブロック・区画する方向にあります。ログイン連携や埋め込み機能はStorage Access APIなど対応方式を確認します。

削除は同じ適用範囲で上書きする

サーバーは同じ名前・Domain・Pathで過去時刻またはMax-Age 0を返して削除させます。PathやDomainが違う同名Cookieは別に残ります。

ログアウト時はブラウザーCookieを消すだけでなく、サーバー側セッションと更新トークンを無効化します。盗まれた複製は別端末に残るためです。

盗用と固定化を防ぐ

セッションIDは十分ランダムにし、ログイン・権限変更時に再生成します。URLへセッションIDを入れず、短い期限、アイドルタイムアウト、サーバー側 revocationを使います。

XSS、ネットワーク、マルウェア、ブラウザー拡張、ログからの漏えいを防ぎます。重要操作では再認証やトランザクション確認を加えます。

Cookieの安全性は値の小ささではなく、どのURL・通信・サイト文脈でブラウザーが自動送信し、盗まれた値をサーバー側でいつ失効できるかで決まります。

HTTP Cookieの送受信と属性の確認資料:RFC 6265「HTTP State Management Mechanism」

関連用語