Cookie

クッキー (HTTP)

[16] Cookie (クッキー) は、利用者エージェントに状態を表すデータを一時保存する仕組み、あるいはその仕組みにより保存されたデータです。

仕様書

クッキーに関係するプロトコル要素と API

[81] 次の項も参照してください。

[90] 側にせよ利用者エージェント側にせよ、多くのプラットフォームでは文字列ベースのクッキー API が提供されており、開発者が個々でクッキーの構文を処理しなければならないため、 正しく処理されるとは限らず、相互運用性の問題につながっていると RFC 6265 は指摘しています。できるだけ文字列ベースの API ではなく、より意味を表した API を提供する方が良いと考えられています。 >>89

クッキーの構成

[79] クッキーは、次の構成要素を持ちます >>78

  • 名前
  • 満期時刻
  • ドメイン
  • パス
  • 作成時刻
  • 最終アクセス時刻
  • 持続フラグ
  • ホストのみフラグ
  • 保安のみフラグ
  • HTTPのみフラグ

[80] これらはCookie属性にほぼ相当しますが、微妙に一対一対応はしていません。
[82] これらの値がどのように設定されるかは、 Set-Cookie: を参照してください。

[91] 名前、値、ドメイン、パスはバイト列です。 (クッキー開発当初の意図、 および仕様に適合するクッキーのみ用いている限りは ASCII 文字列ですが、不適合なものも含めて完全に扱うためには、バイト列とする必要があります。)

クッキーストア

[109] 利用者エージェントは、利用者クッキーストア (cookie store) を保持しています。

クッキーの追加

[86] 著者クッキーを次の方法で追加 (発行) できます。

クッキーの削除

[83] 保存されたクッキーが削除されるのは、次の場合です。

[84] この他、多くの Webブラウザー利用者が特定のクッキー(群)またはすべてのクッキーを削除する方法を提供しています。 利用者エージェントは、利用者が保存されているクッキーを管理する仕組みを提供するべきです >>92

[85] このうち著者が制御できるのは、クッキーの満期のみです。 著者が直接クッキーの削除を指示することはできませんが、 過去の日付を満期時刻としたクッキーを送信することによって削除できます。

[88] は、利用者がいつでも利用者エージェントが保存しているクッキーを削除できることを踏まえ、 いくつかのクッキーCookie: ヘッダーに含まれなかったとしても華麗に対処できるべきです >>87

クッキーの有効性

[93] 利用者エージェントは、利用者クッキーを無効にする仕組みを提供するべきです >>92

Cookie:Set-Cookie: も参照。

[103] とはいえ、クッキーをまったく実装しない利用者エージェントWeb互換とはいえません。クッキーはあらゆる Webサイトで基礎技術として用いられています。 利用者の混乱を防ぐため、利用者エージェントは既定の状態でクッキーを有効にするべきです。 また利用者クッキーを無効にする場合には、多くの Webサイトが正常に動作しなくなる可能性が高いことを理解する必要があります。

[117] プライバシーに過敏な一部利用者や、クッキーを法的に規制している欧州当局が反発するであろうことを考えると、 クッキー無効化の機能が完全に削除されることはなさそうです。

[118] しかしながら、利用者の混乱を最低限に抑えるために、利用者エージェントの設定画面で一般利用者が容易に無効化してしまわない形にした方が良さそうです。 また、特定のWebサイトに限定しない利用者エージェント全体のクッキー無効化オプションは無くてもよいかもしれません。

[119] 一方で、不正な第三者クッキーの提供元ドメインリストのようなものを利用者エージェント提供元で管理し、標準で当該リストに掲載されたドメインクッキーは拒否するような仕組みはあっても良さそうです。

[120] サーバー側でクッキーを使っているとクライアント側ではどうしようもありませんが、 Set-Cookie: ヘッダーの存在により、 クッキーが無効になっている場合に、表示中のページが不完全かもしれないことを利用者に警告してもいいかもしれません。 document.cookie へのアクセスがあったときにも、同様に警告した方が良いかもしれません。

[108] navigator.cookieEnabled を参照。

法規制

[98] EU においては、著者クッキーを利用する前に利用者にその旨の許諾を得る必要があるかもしれません。

[99] EU に対して提供されているWebサービスは初回アクセス時や利用登録時にクッキー利用に同意することを利用者に求める画面を表示するのが普通です。 また世界的に提供されていて EU も提供対象に含まれている Webサービスでは、 IPアドレスなどによって EU からのアクセスと判断された場合にのみそのような画面を表示する場合もあります。

歴史

Netscape による定義

[47] NetscapeのCookie仕様

[77] Netscape Cookies ( ( 版)) http://web.archive.org/web/20030221181342/http://devedge.netscape.com/library/manuals/2000/javascript/1.3/reference/cookies.html

RFC における定義

[102] IETFRFC 2109クッキーの標準化を試みましたが、 Netscape Cookie との互換性がそれほど高くないものでした。 RFC 2965 では Netscape Cookie とも RFC 2109 とも互換性のない新たなクッキーにより両者を置き換えることを試みました。 これらはクッキーの実装に若干の影響は与えましたが、 基本的には市場から無視されました。いずれも現在は RFC 6265 により廃止されています。

[50]

Because it was used in Netscape's original implementation of state management, we will use the term cookie to refer to the state information that passes between an origin server and user agent, and that gets stored by the user agent.

起源鯖利用者エージェントの間で受け渡しされ、利用者エージェントで蓄積される状態情報を、 Netscape の元々の状態管理の実装で「cookie」となっていたので、 ここでも cookie と呼びます。

RFC 2109 2. TERMINOLOGY/RFC 2965 1. TERMINOLOGY

[34] [cs/0105018] HTTP Cookies: Standards, Privacy, and Politics (2005-09-17 23:32:47 +09:00 版) http://arxiv.org/abs/cs.SE/0105018

RFC の中の人の論文

Cookie 串

[17]

これらの規格は、クッキー串に Cookie 管理を一部肩代わりさせるための仕組みを定義しています。

Cookie の消去

[21] Q: 以前に設定した Cookie を消去するにはどうしたらよいですか?

[22] A: 有効期限 (expires) を過去の日付に設定しましょう。

GMT記述は必須?

[25] 質問 (Air 2005-04-22 11:56:41 +00:00): expires項目には日付時間の後にGMTの記述が必要と書いてあるのを見かけますが、 無い場合は、不具合が発生する可能性があるのでしょうか?

[26] 名無しさん 2005-04-23 01:23:48 +00:00: >>25 よく使われている NetscapeのCookie仕様expires 属性の書式についての規定が曖昧ですが、

  • 日付が GMT でなければならないことと
  • 最後に GMT と書かなければならないこと

は明記されています。

前者から、利用者エージェントが甘く解釈して GMT と書かれていなくても勝手に GMT と理解してくれることはあるかもしれませんが、 そうだとしてもエラー処理に過ぎず、 仕様上は認められていません。 書かれていなければ不具合が発生する可能性が高いです

参考: どんな不具合が発生するか (しないか) は実装次第ですが、 特に次のようなことが考えられます。

  • 意図しない時間帯 (利用者エージェントの計算機のある地域の時間など) と解釈される
  • expires 属性自体が書式無効として無視される
  • Set-Cookie: 欄自体が書式無効として無視される
  • 書式無効により、悪意があるかもしれないので Webブラウザがより安全な (機能が制限された) モードに移行する

など。

利用者界面

[51] IETFCookie 仕様 (RFC 2109RFC 2965) はプライバシーを根拠に次のことを利用者エージェントに求めていました。

RFC 2109 7.1 User Agent Control, RFC 2965 6.1 User Agent Control

[57] 更に、 RFC 2965 6.2 Origin Server Role起源鯖にも利用者に提示する情報の提供を求めています。

[27] IE,Mozilla,KonquerorにCookieハイジャックの欠陥 http://fumika.jp/nikki/2004/09/multibrowser-cookie-vulnerability (名無しさん)

[29] おさかなラボ / Blog Archive / MixiとCookieドメイン http://kaede.to/~canada/doc/mixi-and-cookie (名無しさん 2006-10-20 00:37:12 +00:00)

[30] "週"記(2006-01-20) http://www.devnull.jp/tdiary/20060120.html#p01 (名無しさん 2006-10-20 00:43:18 +00:00)

[4] HTML と関連付けられた JavaScript では、 document.cookie で cookie に access できます。

[5] >>4 Mozilla では、まだ XHTML の時にこれが出来ません。 (JavaScriptのQ&A (>>11) を参照。)

[3] Cookie を有効にしろと言って、見に来た人を追い出す Web site は逝ってよし。読む価値なし。

[6] Cookie の有効期限の指定については、Cookieの日付形式を参照。

[12] EZWeb の端末は Version=1 の Cookie にも対応しているようなことが技術情報 http://www.au.kddi.com/ezfactory/tec/spec/cookie.html には書かれていますが、怪しい記述ばかりで本当かどうか不明です。

ここには Version パラメーターが指定されていないと Version=0 とみなされることが説明されているだけです。

Public Suffix

[31] crisp's blog » Blog Archive » IE and 2-letter domain-names (2007-02-14 19:27:55 +09:00 版) http://therealcrisp.xs4all.nl/blog/2007/02/12/ie-and-2-letter-domain-names/ (名無しさん 2007-02-14 10:32:06 +00:00)

[32] [IE] Internet Explorer が 2 文字のドメインに対して Cookie を設定しない (2007-02-14 19:27:52 +09:00 版) http://support.microsoft.com/kb/310676

[28] Operaの中の人の、Cookieドメイン同一性に関する判定についてのI-D

Enhanced validation of domains for HTTP State Management Cookies using DNS urn:ietf:id:draft-pettersen-dns-cookie-validate-00

The TLD Subdomain Structure Protocol and its use for Cookie domain validation urn:ietf:id:draft-pettersen-subtld-structure-00

(名無しさん 2006-03-30 12:43:29 +00:00)

標準化

[18] IETF mailing list for HTTP State Management Mechanism - ietf-httponly-wg | Google グループ ( 版) http://groups.google.com/group/ietf-httponly-wg/browse_thread/thread/10677847df8c0f96/d42e2dbee61f5918?show_docid=d42e2dbee61f5918

[38] [http-state] Cookie storage limits (was Re: Updated draft) ( 版) http://www.ietf.org/mail-archive/web/http-state/current/msg00160.html

Cookie auth-scheme

[36] Cookie (auth-scheme) 参照。

[33] スラッシュドット ジャパン | Googleがcookie有効期間を2年に短縮 (2007-07-22 15:20:11 +09:00 版) http://slashdot.jp/article.pl?sid=07/07/17/1345208&from=rss

[35] ほう、 Mosaic Netscape 0.9Cookie を実装していたとはしらなんだ。

[37] クッキーの最大サイズ制限について ( 版) http://www.teria.com/~koseki/memo/cookie/cookie_4k.html

[39] Cookieセッション、BASIC認証マジパネー - p0t ( 版) http://docs.komagata.org/4437

[40] ここギコ!: 携帯電話のCookie周りについて ( 版) http://kokogiko.net/m/archives/002179.html

[59] IRC logs: freenode / #whatwg / 20100928 ( ( 版)) http://krijnhoetmer.nl/irc-logs/whatwg/20100928

[60] lcamtuf's blog: HTTP cookies, or how not to design protocols ( ( 版)) http://lcamtuf.blogspot.com/2010/10/http-cookies-or-how-not-to-design.html

[61] サードパーティCookieの歴史と現状 Part1 前提知識の共有 - 最速転職研究会 ( ( 版)) http://d.hatena.ne.jp/mala/20111125/1322210819

[62] サードパーティCookieの歴史と現状 Part2 Webアプリケーションにおける利用とその問題 - 最速転職研究会 ( ( 版)) http://d.hatena.ne.jp/mala/20111130/1322668652

[63] サードパーティCookieの歴史と現状 Part3 広告における利用、トラッキング、ターゲティング広告におけるプライバシーリスク - 最速転職研究会 ( ( 版)) http://d.hatena.ne.jp/mala/20111202/1322835191

[64] Safari Trackers « Web Policy ( ( 版)) http://webpolicy.org/2012/02/17/safari-trackers/

[65] GoogleがSafariの設定を迂回してユーザーを追跡していたことが判明 - ITmedia ニュース ( ( 版)) http://www.itmedia.co.jp/news/articles/1202/18/news015.html

[66] Safari Trackers « Web Policy ( ( 版)) http://webpolicy.org/2012/02/17/safari-trackers/

[67] GoogleがSafariの設定を迂回してユーザーを追跡していたことが判明 - ITmedia ニュース ( ( 版)) http://www.itmedia.co.jp/news/articles/1202/18/news015.html

[68] HTTP::Cookies - search.cpan.org ( ( 版)) http://search.cpan.org/dist/HTTP-Cookies/lib/HTTP/Cookies.pm

[69] CGI::Cookie - search.cpan.org ( ( 版)) http://search.cpan.org/dist/CGI/lib/CGI/Cookie.pm

[70] GoogleがSafariの設定を迂回してトラッキングしていたとされる件について - 最速転職研究会 ( ( 版)) http://d.hatena.ne.jp/mala/20120220/1329751480

[71] [Apache-SVN] Contents of /httpd/apreq/trunk/library/cookie.c ( ( 版)) http://svn.apache.org/viewvc/httpd/apreq/trunk/library/cookie.c?view=markup

[72] GoogleがSafariの設定を迂回してトラッキングしていたとされる件について(2) - 最速転職研究会 ( ( 版)) http://d.hatena.ne.jp/mala/20120815/1344999915

[73] Cookie Law Compliance Solution | Cookie Control by Civic ( ( 版)) http://www.civicuk.com/cookie-law/index

[74] Firefox 22のCookieに関するポリシー変更(予定)についての意見書 ( ( 版)) https://gist.github.com/mala/5028502

[75] Appleがクッキーを利用しているアプリを拒絶へ: Ad Identifierへの統一がねらい ( ( 版)) http://jp.techcrunch.com/archives/20130225apple-rejecting-apps-using-cookie-tracking-methods-signaling-push-to-its-own-ad-identifier-technology-is-now-underway/

[76] Twitter / bulkneets: 懇親会でOperaの人がサードパーティCookie一瞬デフォ ... ( ( 版)) https://twitter.com/bulkneets/status/129143900727279616

[94] draft-pettersen-cookie-origin-02 - Identifying origin server of HTTP Cookies ( ( 版)) http://tools.ietf.org/html/draft-pettersen-cookie-origin-02

[95] draft-vyncke-v6ops-happy-eyeballs-cookie-00 - Happy Eyeballs Considerations for HTTP State Management Mechanisms ( ( 版)) http://tools.ietf.org/html/draft-vyncke-v6ops-happy-eyeballs-cookie-00

[96] draft-willis-sip-cookies-00 - SIP Cookies ( ( 版)) https://tools.ietf.org/html/draft-willis-sip-cookies-00

関連

[49] CookieJavaScript による Webブラウザ上のストレージとしても使われてきましたが、 特ににデータを送信する必要がない (ほとんどの) 場合のために新たに Web Storage 仕様が作られ、ほとんどの Webブラウザで利用可能となっています。

[97]クッキー」は、 HTTP 以外でも2層から7層まで色々なプロトコル状態セッションなどに関わるプロトコル要素の呼称として用いられています。

[100] WebDriver ( ( 版)) https://dvcs.w3.org/hg/webdriver/raw-file/default/webdriver-spec.html#h3_cookie

[101] [webappsec] Rechartering: additional cookie data ( (Brad Hill 著, 版)) http://lists.w3.org/Archives/Public/public-webappsec/2014Nov/0132.html

[104] Googleがcookie有効期間を2年に短縮 | スラッシュドット・ジャパン IT ( 版) http://it.slashdot.jp/story/07/07/17/1345208/

[105] CookieMonster - The Chromium Projects ( 版) https://www.chromium.org/developers/design-documents/network-stack/cookiemonster

[106] Part2 - browsersec - Browser Security Handbook, part 2 - Browser Security Handbook - Google Project Hosting ( 版) https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_cookies

[107] 多くのブラウザーは file: 文書において document.cookie に対応しています >>106

[110] IRC logs: freenode / #whatwg / 20150831 ( 版) http://krijnhoetmer.nl/irc-logs/whatwg/20150831#l-258

# [15:34] <mkwst> annevk: I know that ~11% of Chrome users that opted into metrics clear cookies on a weekly basis.

# [15:34] <mkwst> annevk: as I noted on the other thread, I don't have any more detail than that. Nor do I really know how I'd get it...

# [15:35] <MikeSmith> ~11% is a relatively huge number

# [15:36] <mkwst> 11.8% last week.

# [15:37] <mkwst> I wonder if I can get historical information on this... my recollection is that it's been pretty constant. If users have learned anything at all about privacy on the web, it's "Clear cookies! All the time! Twice, even, just to be sure!"

# [15:38] <mkwst> All I have is a raw counter. It's interesting, though: the counter is 5x the number of users. So this set of users is really clearing cookies _often_.

# [15:40] <mkwst> MikeSmith: Dunno. I just want to ship the pieces that solve the problems I care about. I feel like doing that in an iterative fashion is reasonable. It's just not clear to me what the MVP actually is.

# [15:41] <annevk> mkwst: I guess the other number that's interesting is how many have stored passwords and how often those are cleared (if ever)

# [15:42] <mkwst> 3.04% of users check the "passwords" box when clearing browsing data.

# [15:42] <mkwst> or, more accurately, 3.04% of users cleared passwords in the last week.

[111] mikewest/internetdrafts ( 版) https://github.com/mikewest/internetdrafts

[112] draft-west-cookie-prefixes-04 - Cookie Prefixes ( 版) https://tools.ietf.org/html/draft-west-cookie-prefixes-04

[113] Potential changes to cookies in Chrome. (Mike West 著, 版) https://lists.w3.org/Archives/Public/public-webappsec/2015Nov/0069.html

[114] Propose an FPWD of cookies. · w3c/webappsec-csp@c0afb8a ( 版) https://github.com/w3c/webappsec-csp/commit/c0afb8af651712d2cef3c608603f6f88b3b93de1

[115] Revising RFC6265 ("Cookies") (Mark Nottingham 著, 版) https://lists.w3.org/Archives/Public/ietf-http-wg/2015OctDec/0165.html

[116] Clarify the hooks into RFC6265 · whatwg/fetch@5a324a8 ( 版) https://github.com/whatwg/fetch/commit/5a324a891c42d42de09a01e03c3a063b9a4f882b

[121] bsittler/async-cookies-api: Sketching an asynchronous JavaScript cookies API for documents and workers ( ()) https://github.com/bsittler/async-cookies-api

[122] Specify how document.cookie diverges from [COOKIES] RFC · Issue #804 · whatwg/html ( ()) https://github.com/whatwg/html/issues/804

[123] Cookies specification compatibility in modern browsers ( ()) https://inikulin.github.io/cookie-compat/

[124] inikulin/cookie-compat: Browsers RFC 6265 compatibility research - http://inikulin.github.io/cookie-compat. ( ()) https://github.com/inikulin/cookie-compat

[125] Re: Defining First and Third Party Cookies ( (Mike West著, )) https://lists.w3.org/Archives/Public/ietf-http-wg/2016JanMar/0249.html

[126] Clear entire eTLD+1 for cookies. (@annevk著, ) https://github.com/w3c/webappsec-clear-site-data/commit/9b510bfa74223535670aba8a00177af883b28a8a

[127] Issues · httpwg/http-extensions () https://github.com/httpwg/http-extensions/issues?q=is%3Aopen+is%3Aissue+label%3A6265bis

[128] Cookie Prefixes () http://httpwg.org/http-extensions/draft-ietf-httpbis-cookie-prefixes.html

[7] Cookie等の利用に関するガイドライン策定のお知らせ|ニコニコインフォ () http://blog.nicovideo.jp/niconews/17542.html?ref=top_info

[8] Cookie等の利用に関するガイドライン () http://site.nicovideo.jp/cookies/

[129] サンドボックスドメイン上に書き込まれたcookieを使ったWeb訪問履歴漏洩やfingerprintingについて · GitHub ( ()) https://gist.github.com/mala/7e1ff3bb042515f8f09435e1318ab14a

[130] ChromeDriverGet All Cookies を実装していますが、 Get Named Cookie は未実装です。 GeckoDriver は実装済みです。

[131] Americanise the spelling of "serialized cookie" (shs96c著, ) https://github.com/w3c/webdriver/commit/00fef21d5a4bf651ae18f58621018e2791de1c3b

[132] Don't set expiry on a session cookie (#969) (shs96c著, ) https://github.com/w3c/webdriver/commit/de0b3ec06f5b4ade798bcc7ceae8eea872dbfa6d

[133] Don't set expiry on a session cookie by shs96c · Pull Request #969 · w3c/webdriver () https://github.com/w3c/webdriver/pull/969

[134] Ensure all cookies are serialized (shs96c著, ) https://github.com/w3c/webdriver/commit/7943831074c0db907cb95013e8e2a17defafc562

[135] Ensure all cookies are serialized by shs96c · Pull Request #972 · w3c/webdriver () https://github.com/w3c/webdriver/pull/972

[136] RFC6265bis Tests () http://rfc6265.biz/tests/

[137] mikewest/rfc6265-biz () https://github.com/mikewest/rfc6265-biz

[138] Specify how document.cookie diverges from [COOKIES] RFC · Issue #804 · whatwg/html () https://github.com/whatwg/html/issues/804

[139] inikulin/cookie-compat: Browsers RFC 6265 compatibility research - http://inikulin.github.io/cookie-compat. () https://github.com/inikulin/cookie-compat

[140] Cookies specification compatibility in modern browsers () https://inikulin.github.io/cookie-compat/

[141] Meltdown/Spectre  |  Web  |  Google Developers () https://developers.google.com/web/updates/2018/02/meltdown-spectre

[142] Define hosts' public suffix and registrable domain. by mikewest · Pull Request #391 · whatwg/url () https://github.com/whatwg/url/pull/391

[143] Content Security Policy: Cookie Controls () https://w3c.github.io/webappsec-csp/cookies/

[144] Cookie controls? (Yoav Weiss著, ) https://lists.w3.org/Archives/Public/public-webappsec/2018Aug/0015.html

[145] mikewest/http-state-tokens: Incrementally better HTTP state management. () https://github.com/mikewest/http-state-tokens

[146] Re: Cookie controls? (Mike West著, ) https://lists.w3.org/Archives/Public/public-webappsec/2018Aug/0020.html

[147] Asynchronous Access to HTTP Cookies  |  Web  |  Google Developers () https://developers.google.com/web/updates/2018/09/asynchronous-access-to-http-cookies