HttpCookieとは何? わかりやすく解説 Weblio辞書 (original) (raw)

その他の用法については「クッキー (曖昧さ回避)」をご覧ください。
この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。 出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)出典検索?: "HTTP cookie"ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL (2021年3月)
HTTP
主要項目
持続的接続 圧縮(英語版HTTPS HTTP/2 HTTP/3
リクエストメソッド
OPTIONS GET HEAD POST(英語版PUT DELETE TRACE CONNECT PATCH(英語版
ヘッダーフィールド(英語版
Cookie ETag Location(英語版リファラ DNT(英語版X-Forwarded-For
ステータスコード
301 Moved Permanently(英語版302 Found 303 See Other(英語版403 Forbidden 404 Not Found 503 Service Unavailable
認証方式
Basic認証 Digest認証
セキュリティホール
HTTPヘッダ・インジェクション HTTPリクエストスマグリング(英語版) HTTPレスポンス分割(英語版) HTTPパラメータ汚染(英語版

HTTP cookie(エイチティーティーピークッキー)は、マジッククッキーの一種。単にクッキーcookie)とも表記される。

RFC 6265などで定義されたHTTPにおけるウェブサーバウェブブラウザ間で状態を管理する通信プロトコル、またそこで用いられるウェブブラウザに保存された情報のことを指す。ユーザ識別やセッション管理を実現する目的などに利用される。

概要

HTTPは元来ハイパーテキストにおいて単にファイル転送を行うために開発されたため、同じURLへのアクセスならその状況によらず同一の情報源[1]を提供することが前提となっている。動的なコンテンツ生成の仕組みとしてフォームが導入されているが、これは要求に直接対応する応答だけに影響をおよぼす。言い換えるとHTTPでは、同じ瞬間に同じ内容の要求を行っていれば、そのクライアントが以前にどのような通信を行っていても区別されない。HTTPはその意味で現在においてもステートレスなプロトコルである。

その一方でWorld Wide Webが普及するにつれ、状況によって異なる内容のページを提供したい[2]というニーズが生まれた。そのようなニーズをHTTPのみで満たすには、IPアドレスによって区別する、状態を表現したユニークなURLを生成するなどの方法がある。しかし、プライベートネットワークからのアクセスを区別できない、本来二度起きない状態が同じURLにアクセスすることで何度も発生する、セキュリティの問題などいずれも容易に解決できない欠点を抱えていた。

そこで、1994年にネットスケープコミュニケーションズ社によってクッキー[3] が提案・実装された。クッキーでは次のようにサーバとクライアント間の状態を管理する。

  1. ウェブサーバがウェブブラウザにその状態を区別する識別子をHTTPヘッダに含める形で渡す。
  2. ブラウザは次にそのサーバと通信する際に、与えられた識別子をHTTPヘッダに含めて送信する。
  3. サーバはその識別子を元にコンテンツの内容をユーザに合わせてカスタマイズし、ブラウザに渡す。必要があれば新たな識別子もHTTPヘッダに含める。

以降2、3の繰り返し。

この仕組みによって、ステートレスなプロトコルであるHTTP上でステートフルなサービスを実現する。ここで注意すべき点は、一度設定されたクッキーは、条件を満たす限り何度でも要求に組み込まれるという点である。HTMLページの要求だけでなく、画像を含むすべての要求が対象となる。

その後クッキーは1997年にRFC 2109で初めて標準化され、2000年のRFC 2965、2011年のRFC 6265で更新された。2007年現在ほとんどのウェブサーバ、ウェブブラウザで利用可能である。

仕様間の違い

前述の通り、HTTP Cookie には幾つか仕様があるが、IETFの標準化した RFC 2109RFC 2965 は、ネットスケープ仕様とExpires属性からMax-Age属性への変更等互換性がないため、実際のウェブサイトではほとんど使われていない[4]。一方で、Expires属性等で用いられる日付形式は仕様外の記述が氾濫しているうえ[5]、セキュリティ上の理由からhttponly属性やsecure属性等が事実上追加されており、長らく文書の存在しない状態が続いていたが、RFC 6265 はこれらの問題を解消することを意図して制定されている。

2016年頃から、RFC 6265の改訂作業が行われている[6]。クッキープレフィックス(__Secure-__Host-)、SameSite属性の追加などが行われる予定で、すでにウェブブラウザでの実装も並行して進められている[7][8]

用途

クッキーの最も代表的な用途は、ショッピングサイトにおけるカートやログイン状態の管理である。また、IPアドレスによらないクライアントの識別を可能にするため、ウェブサイト運営者やインターネット広告配信業者などがユーザの詳細なアクセス履歴を取得する用途にも使われる。

クッキーは毎回送られるものであり、またHTTPヘッダの一部なのでASCII文字列になっている必要がある。そのためクッキーでデータを直接扱うよりも、セッションID(英語版)を実装する手段として使うことが多い。この場合、実際のデータは、セッションIDをキーとしてサーバが保持することになる。

例えば特定のページの表示回数を、ウェブページ上に表示したいときには、おおむね次のようなやりとりが行われる。

  1. ブラウザがサーバに閲覧を要求する。ここにはクッキーの情報はない。
  2. サーバはブラウザに対し「1」回目というクッキー情報と、「1回目」と表示するようなデータを送信する。
  3. ブラウザがサーバに閲覧を要求する。このときブラウザは、そのサーバから受け取ったクッキーを探して、「1」のクッキー情報をサーバに送信する。
  4. サーバは「1」というクッキー情報に基づき、ブラウザに対し「2」回目というクッキー情報と、「2回目」と表示するようなデータを送信する。

例:MediaWikiにおけるログイン情報

例として、MediaWikiにおけるクッキーの使用をあげる。

MediaWikiソフトウェアでは、ログイン情報をクッキーで実現している。その方法はおおむね次のようである。

  1. ログインページからユーザ名とパスワードをサーバに送信する。この時点でクッキーは使われていない。
  2. サーバは、ユーザ名とパスワードを確認し、ユーザーにカスタマイズされた「ログイン成功」のページを送信するとともに、ユーザー名とパスワードを(そのままではないが)クッキーとして送信する。
  3. 次の閲覧からはブラウザがページ閲覧要求とともに先のクッキーを送信する。サーバはクッキー情報によってユーザにカスタマイズされたページを送信する。
  4. ログアウトをクリックすると、「ログアウト」のページとともに、空のクッキー情報を送信する。ブラウザは、先のクッキー情報を空のクッキー情報で上書きする。これにより最初のクッキー情報は消去される。

クライアント側スクリプトによるクッキーの操作

クッキーは、HTML DOMの一部としてアクセスできる。JavaScriptをはじめとする、クライアント側のスクリプトは、クッキーを操作することができる。ただし後述のようにクッキーには有効範囲が設定されており、そのURLにおいて有効なクッキーだけがアクセス対象となる。

ブラウザの環境設定によるクッキーの操作

現在使われているウェブブラウザのほとんどはクッキーの送受信が可能であり、初期状態でクッキーを送受信する設定になっている。しかし、クッキーの送受信をするしない、またそのクッキーの内容は、ウェブ閲覧者の自由に置かれるべきものであるので、ブラウザの初期設定でそれらを操作できるようになっている。すなわち、クッキーの送受信を停止する、クッキーの内容を確認する、クッキーを消去するといった機能がウェブブラウザに備わっている。

クッキーの適用範囲と有効期限

クッキーを設定する際、どの要求に対してクッキー情報を送り返すのか、URLの範囲を指定する。規定値は、クッキーを設定したサーバに対するすべての要求であり、対象を広げることも狭めることもできる。ただし広げる場合でも、トップレベルドメインより狭い範囲でなければならない。

またクッキーの有効期限は、通常はブラウザを終了するまでだが、指定した期限まではブラウザを再度起動しても保持されるように設定することができる。有効期限の情報も、サーバからブラウザにクッキー情報を送信する段階で付加される。 無期限という設定は出来ない。遥か未来を指定することで半永久的に有効にすることも可能だが、ブラウザやサーバが2038年問題で不具合を起こす場合があることから[9]、2038年1月19日3時14分07秒(UTC)以降の時間を期限とすることはあまりない。

セキュリティ、プライバシーの問題

この節の加筆が望まれています。

セッションハイジャック

クッキーでセッション管理を行う場合、もし第三者がセッションIDを知ることができれば、そのIDを名乗ることで本来のユーザになりすますことができる。このような「なりすまし」行為をセッションハイジャックと呼ぶ。

例として、以下のような通信を行うシステムがあるとする。

  1. トップページでユーザIDとパスワードの入力を求める。
  2. 認証に成功するとサーバはセッションIDを割り当て、クッキーとしてクライアントに通知する。
  3. クライアントは以降の要求にクッキーとしてセッションIDを付加する。サーバは対応するセッション情報にアクセスし、どのユーザであるか識別する。

もし第三者がセッションIDを知ることができれば、そのセッションが有効な間だけとはいえ、1~2を飛ばして3から開始することができる。すなわち、パスワードを知らなくても「なりすまし」が可能となる。

第三者のクッキー情報を知る方法のひとつは盗聴である。盗聴を防ぐ手段としてTLSがある。ただしここで、クッキーは有効範囲内のすべての要求に対して自動的に付加されることに注意する必要がある。SSLでクッキー情報を暗号化しているつもりでも、有効範囲の設定によっては、SSLを利用しない要求にもクッキーが付加される可能性がある。情報処理推進機構は2003年8月に、この点に関する注意喚起[10]を行った。

クロスサイトスクリプティングも、クッキー情報を不正に得る手段として使われる場合がある。クッキーには有効範囲が設定されているが、その有効範囲内にクロスサイトスクリプティング脆弱性を持つページがある場合、JavaScript等を併用して、他のサーバにクッキー情報を(URLの一部に組み込むなどして)送信させることが可能になる。

トラッキング・クッキー

クッキーを使うと、そのユーザからの他の要求と関連付けることができる。

この手法は、アドネットワークGoogle AdSenseなど)を利用するウェブ広告業者がよく用いる。インターネット広告の配信において、バナー広告は、業者のサーバ(サードパーティー)へのリンクを介して画像を取得する形式が一般的である。前述のとおりクッキーはHTMLに限らず、画像にも設定することができる。HTTPではリンク元のURL情報も送信することが一般的なので、結果として広告業者は、同社を利用するすべてのサイトを対象としてそのユーザのアクセス履歴を把握することが可能になる。詳細はCookieとスパイウェアの関係も参照。ユーザのアクセス履歴を追跡するという意味からトラッキング・クッキーと呼ばれたり、メインのHTMLではなく画像の提供元が設定するという意味からサードパーティー・クッキーと呼ばれたりする。これらは、行動ターゲティング広告コンテンツ連動型広告および検索連動型広告などに活用され、時にフィルターバブルの原因ともなっているが、今後Federated Learning of Cohortsに移行する動きがある。

これをプライバシーの侵害と考える人も、そう考えない人もいる。このようなクッキーを設定したくないユーザのために、クライアント向けセキュリティ対策ソフトの多くは、トラッキング・クッキーを検出・除去する機能を備えている[11][12]。しかし、すべてのユーザにその影響が正しく理解されているとは限らず、コンピュータウイルスと誤解して初心者が驚くといった状況も散見される。

類似のトラッキング技術

ウェブサイト作成者はクッキーを用いなくても、サードパーティーGoogle Analytics等を使うことでIPアドレスユーザーエージェントウェブビーコンHTTPリファラなどを利用してアクセス解析をおこないウェブ トラッキング(英語版)をすることが可能である。JavaScriptおよびHTML5WebGLcanvas要素Webフォントなど)を用いたその他の手法についてはフィンガープリントも参照。

またAdobe Flashで使われるLocal Shared Object(フラッシュ・クッキーとも呼ばれる)やSilverlightの保存領域、HTML5(インストール済みのWebフォントなど)、Faviconなどを利用してクッキーと同様のトラッキングをすることが可能である。ユーザには非常に気づかれにくい上に、クッキーが拒否あるいは削除されてもそれらの情報から容易に生成・復元することもできる。これらを総称して Zombie cookie (ゾンビ・クッキー)や Supercookie (スーパー・クッキー)などと呼ばれる[13]

問題になり始めた2011年現在では一般的なウェブブラウザやセキュリティソフトウェアの多くはこれに対処できておらず、防止や除去のためにはサードパーティー製ブラウザアドオンの使用とJavaScriptの制御や無効化、ウェブブラウザのプライバシーモードCCleanerを用いたキャッシュおよび閲覧履歴の完全な削除などの対策が必要である。なお、Tor BrowserOnion Browserに関しては、いまのところウェブトラッキングやキャンバス・フィンガープリンティングなどの回避に有効[14]である。

国内法における規制

2019年にリクナビの運営会社が目的を十分に説明しないまま、クッキーで得られた情報を外部に販売した問題が発覚したことを受けて、2022年4月1日施行の個人情報の保護に関する法律によって、クッキーの活用に規制がかけられるようになった[15][16]

脚注

  1. ^ ここで言う資源とは、HTML文書や画像、音声、などのコンテンツ全般を指す。
  2. ^ ウィキペディアを例に挙げると、同じURLでもログインしていない場合はページの一番上が「ログインまたはアカウント作成」、している場合は「(ユーザ名) 自分の会話 個人設定 ウォッチリスト 自分の投稿記録 ログアウト」と表示が変化する。
  3. ^ Netscape Communications Corporation. “PERSISTENT CLIENT STATE HTTP COOKIES” (英語). 2011年9月29日閲覧。
  4. ^ Dan Winship. “2009-08-05-Dan-Winship.txt” (英語). 2011年9月29日閲覧。
  5. ^ Dan Winship. “2009-08-11-Dan-Winship.txt” (英語). 2011年9月29日閲覧。
  6. ^ draft-ietf-httpbis-rfc6265bis-06
  7. ^ Can I use: headers HTTP header: Set-Cookie: Cookie prefixes
  8. ^ Can I use: 'SameSite' cookie attribute
  9. ^ Microsoft. “[IIS]2038 年 1 月 19 日以降の有効期限のクッキーにおける ASP 200 エラー”. 2008年6月16日閲覧。
  10. ^ 情報処理推進機構. “経路のセキュリティと同時にセキュアなセッション管理を”. 2008年5月24日閲覧。
  11. ^ Symantec Corporation. “システムの完全スキャンを実行するとトラッキング・クッキーのリスクが表示される”. 2008年6月15日閲覧。
  12. ^ Trend Micro Incorporated. “スパイウェア検索をすると「COOKIE_・・・・」が多量に検出されるのですが、大丈夫ですか?”. 2008年6月15日閲覧。 [_リンク切れ_]
  13. ^ “アドネットワークは、常にあなたを監視している”. japan.internet.com. (2011年10月25日). http://japan.internet.com/wmnews/20111025/5.html 2011年10月26日閲覧。
  14. ^ Fingerprint解説サイト - 明治大学 情報セキュリティ研究室
  15. ^NTTコムオンライン”. NTT. 2023年1月30日閲覧。
  16. ^ 坪井宏彰 (2024年10月17日). “Cookieバナー多すぎ? ダークパターンに注意”. NHKニュース. 日本放送協会. 2024年10月18日閲覧。

関連項目

外部リンク

この項目は、コンピュータに関連した書きかけの項目です。この項目を加筆・訂正などしてくださる協力者を求めていますPJ:コンピュータ/P:コンピュータ)。
ウェブブラウザ
比較(英語版) 歴史(英語版一覧 UNIX対応(英語版年表 利用シェア
機能 アドブロック ダウンロードマネージャ Cookies DNS over HTTPS DNSSEC Favicon ブックマーク ブックマークレット スマートブックマーク(英語版) ブラウザセキュリティ(英語版プライバシーモード タブブラウザ 拡張機能 ウェブ標準 Acidテスト CSS HTML HTML5 OCSP SVG XHTML WebGL WebSocket WebRTC XMLHttpRequest JavaScript MathML 関連項目 World Wide Web ウィジェット リッチインターネットアプリケーション インターネットスイート モバイルサイト オフラインリーダー(英語版BrowserChoice.eu マン・イン・ザ・ブラウザ WPAD PAC HTTP HTTP/2 HTTP/3 HTTPS TLS/SSL セキュア通信 Tor VPN プロキシ HTTPの持続的接続 HTTPパイプライン SPDY ALPN XML CRL HTMLレンダリングエンジン 推奨ブラウザ ネットサーフィン Webサーバ ブラウザ戦争 フルブラウザ ネット検閲 ディープ・パケット・インスペクション ブロッキング コンテンツフィルタリング インターネット広告 アドネットワーク アクセス解析 ウェブビーコン フィルターバブル SEO
デスクトップ WebKit & BlinkChromium系自由ソフトウェア(開発継続中) Brave Braver Chromium Dooble(英語版Falkon Iridium(オランダ語版Konqueror Otter Browser Web フリーウェア(開発継続中) Avant Blisk Dragon(英語版Craving Explorer2.x Chrome iCab Lunascape Maxthon Microsoft Edge(version 79以降) OmniWeb Opera (Version 15以降) Safari Sleipnir(version 4.0以降) SRWare Iron Vivaldi (開発終了済)すべて▲ Arora Flock (Version 3.0以降) Fluid(英語版KHTML rekonq RockMelt シイラ Origyn(英語版) Sputnik Swift Uzbl(英語版WebPositive xombrero(英語版Gecko & Servo(Firefox系) (開発継続中) Avant Basilisk(英語版) Epic(英語版Firefox GNU IceCat LibreWolf Lunascape SlimBrowser SeaMonkey Tor Browser Waterfox Floorp Midori (開発終了済)すべて▲ Beonex Communicator Camino Classilla Conkeror Flock (Version 2.6.1以前) Galeon Ghostzilla K-Meleon 風博士 Kirix Strata Lotus Symphony Mozilla Netscape Pale Moon(旧バージョン) Sleipnir(2.x系,3.x系のversionのみ) Timberwolf(英語版) xB Browser Trident & EdgeHTMLEdge, IE系)(開発終了済)すべて▲ aiBrowser AOL Explorer Avant Conqueror Browser Craving Explorer1.x Deepnet Explorer Donut(RAPT,unDonut) Grani GreenBrowser Internet Explorer Lunascape Maxthon MenuBox NeoPlanet NetCaptor MediaBrowser Microsoft Edge(version 78以前) Sleipnir(version 4.x系以前) _SpaceTime_(英語版) UltraBrowser WebbIE ZAC Browser Presto Opera (Version 12.18以前)▲ Goanna Pale Moon テキスト ELinks Emacs/W3▲ Line Mode BrowserLinks Lynx Net-Tamer▲ w3m ほぼテキストブラウザ▲ WannaBe(英語版)▲ その他 abaco(英語版Amaya Arachne(英語版)▲ Arena(英語版)▲ Beaker▲ Charon(英語版Dillo EGBrowser▲ Gazelle ホームページリーダーLadybird IBrowse▲ KidZui Mosaic-CK Mothra(英語版)▲ NetPositiveNetSurf Oregano(英語版)▲ NCSA MosaicWebBoy▲ Avast SafeZone Browser
モバイル WebKit/Blink Android標準ブラウザBrave Google Chrome for Android Google Chrome for iOS Dolphin Browser iCab Mobile iLunascape Microsoft Edge S60 web browser Onion BrowserIOS専用) Opera Mobile(version 14以降) Orion Browser(IOS専用) Safari Silk SRWare Iron (for Android) ニンテンドー3DSインターネットブラウザ Steel(英語版) BOLT(英語版Opera Coast Espial HTML5 Browser Gecko Firefox for mobile iLunascape MicroB MinimoOrfoxAndroid専用)▲ Tor Browser(version 8.5以降。Orfoxの後継でAndroid専用) Trident/EdgeHTML iLunascape Internet Explorer MobileMicrosoft Edge(2020年まで)▲ Presto ニンテンドーDSブラウザー ニンテンドーDSiブラウザー Opera Mobile(version 12以前) その他 Blazer(英語版) Deepfish▲ Galio▲ ibisBrowser Iris Browser Konqueror Embedded NetFront Obigo Browser Opera Mini Skweezer Skyfire(英語版) Teashark ThunderHawk(英語版) UC Browser uZard Web Vision WinWAP Smooz
テレビ · ゲーム機 WebKit/Blink Google TV NetFront Browser NX Steam overlay Espial HTML5 Browser Amazon Silk Gecko Kylo(英語版Presto インターネットチャンネル その他 Galio▲ MSN TV (WebTV) NetFront
▲印のブラウザは開発終了 カテゴリ コモンズ