Cookie

2022-09-17 (土) 13:09:36

Cookie とは

名称

  • クッキー

概要

  • WebサーバがアクセスしてきたクライアントのWebブラウザにデータを保存する仕組み

Cookie の用途

  • セッション管理
  • アクセスしてきたクライアント(ユーザ)の識別

Cookieの仕様

  • 「名前=値」の形式でデータを保存する
  • サイズ 最大4,096B
  • 1つのWebブラウザに保存できる数:最大300(ドメイン毎)
  • 1台のWebサーバが1つのWebブラウザに発行できる数:最大20

属性

domain

  • Cookieの送信先サーバのドメイン
  • Cookie登録時にアクセスしたサーバ以外のドメイン(サブドメインが異なる同一ドメイン等)にもCookieを送信する場合に指定する。
    • 異なるサブドメインやホスト名のサーバ間でセッション情報などの共有が可能になる
  • 「.」から始まる形式で指定する

expires

  • Cookieの有効期限。
  • 日時で指定する
  • 指定がない場合は、ブラウザの終了時に消去される
  • 指定がある場合は、ブラウザを終了しても消去されない

path

  • Cookieを有効とするサーバー上のディレクトリを指定。
  • 指定がない場合は、「/」を指定したものとして扱う。(Cookieを発行したページ配下のディレクトリを有効とする)

secure

  • secure属性をつけると、HTTPSでの通信のみCookieの値をサーバーに送信するようになる。
  • 指定することで、盗聴によりCookieが盗まれるのを防ぐことができる。

HttpOnly

  • HttpOnly属性をつけると、JavaScriptからCookieの値にアクセスできない。
  • XSSによるCookieとして登録したセッションIDを盗もうとする攻撃の対策に使う。
  • "document.cookie"を用いたCookieへのアクセスを禁止する
  • 指定することで、XSSによりCookieが盗まれるのを防ぐことができる。
  • 旧バージョンのブラウザで対応していないものがある(IE6 SP1より前)

SameSite

  • None
  • Lax
  • Strict

クライアント側にCookieを登録する方法

HTTPヘッダを使う

  • Set-Cookie
    • Webサーバがクライアントに応答する際にSet-Cookieヘッダを付加する。

JavaScriptを使う

  • document.cookieプロパティを使う。

クライアント側に登録したCookie情報の扱い

  • Webブラウザから同じドメインのウェブページにアクセスする際に、登録されているCookie情報がHTTPヘッドに付加して送信される。
  • 送信先のサーバは、Cookie登録時のサーバのみ。(デフォルト)

Cookieの有効期限

  • 登録するCookieに有効期限を設定することができる
  • 有効期限が設定されていないCookieは、ブラウザを終了すると無効になる。

Cookieの種類

  • Persistent Cookie
  • Session Cookie

セキュリティ

クッキーモンスターバグ

  • Cookie Monster Bug
  • クッキーのdomain属性が正しく機能しないで、指定した範囲を超えて有効になるWebブラウザのバグ。
    • サブドメインを持つURLのサイトから、ドメインのみ(サブドメインを持たない)のURLのサイトに対して、有効なCookieを発行できる問題。
  • 脆弱性の対象となる攻撃
  • 一部の古いブラウザが持っている問題。
    • IE7, IE8.1には、地域型JPドメインと都道府県型JPドメインがこのバグを持っている。

ファーストパーティCookieとサードパーティCookie

  • ファーストパーティCookie
    • HTMLと同じドメインのサーバーから送信されるCookie
  • サードパーティCookie
    • HTMLと異なるドメインのサーバーから送信されるCookie

関連サイト

  • Cookielessで再構築が必須となるデジタルマーケティング - NRI

関連用語