cookie

cookie

目次

  1. cookie (HTTP)
  2. document.cookie 属性 (DOM HTML)
    1. 仕様書
    2. 取得
    3. 設定
    4. 歴史
    5. 保安性
    6. 関連
    7. メモ
  3. メモ

document.cookie 属性 (DOM HTML)#

[18] 本章の記述は、2009年2月1日時点の WHATWG HTML5 勧告案 (r2733) に基づいています。

[19] document.cookie 属性は、 当該資源クッキーを表します HTML5

仕様書#

[15] 実装仕様書:

[16] >>7 は大して参考になりません。 >>8 は比較的参考になります。

取得#

[20] 取得時には、 document.cookie 属性は次のように動作しなければなりません HTML5

  1. 文書閲覧文脈に関連付けられていなければ、 INVALID_STATE_ERR 例外を投げます。
  2. 文書閲覧文脈砂箱化起源閲覧文脈旗が設定されていれば、 SECURITY_ERR を投げます。
  3. 文書の番地鯖型命名局を使っていなければ、空文字列を返します。
  4. 当該文書の番地によって示された資源HTTP によって取る場合に Cookie: HTTP 頭欄の値として使う文字列と同じものを、 RFC 2109 4.3.4節またはより新しい仕様書に基づき返します。ただし、 HTTPのみのクッキーは除きます。

設定#

[21] 設定時には、 document.cookie 属性は次のように動作しなければなりません HTML5

  1. 文書閲覧文脈に関連付けられていなければ、 INVALID_STATE_ERR 例外を投げます。
  2. 文書閲覧文脈砂箱化起源閲覧文脈旗が設定されていれば、 SECURITY_ERR を投げます。
  3. 文書の番地鯖型命名局を使っていなければ、空文字列を返します。
  4. 当該文書の番地HTTP によって取ることを丁度試みようとしたところ、 Set-Cookie: 頭欄として指定された値が返されたとした場合と同じようにして、 RFC 2109 4.3.1〜4.3.3節またはより新しい仕様書に基づきクッキーを処理します。ただし、 HTTPのみのクッキーの値を上書きすることはありません。

[22] document.cookie の覚え書き - Ci.nsIZIGOROu - Mozilla 拡張機能勉強会 ( 版) http://moz-addon.g.hatena.ne.jp/ZIGOROu/20081001/1222845305

ところで、a=1, b=2 と言う二つを同時に設定する事は出来ません。

document.cookie="a=1;b=2";
alert(document.cookie);
とやると a=1 しか設定出来てません。

[23]

A, B と言うタブを開いていて、共に test.example.com のページだとすると。

A の document.cookie を弄ると、A での変更は B でも読める権限ならば即座に反映されている。

歴史#

[1] DOM 0+ の属性 HTMLDocument.cookie は、当該文書に関連付けられた持続状態情報 (Cookie) を扱うための属性です。 属性値の型は DOMString です。

DOM 1 FE ではこの属性は読取専用でした。

DOM 1 は意味的な点には触れていません。 DOM 2 は RFC 2965 を参照しています。 DOM 2 仕様書は UA のセッションについての正確な動作は規定しないと言っています。

仕様書:

[2] この属性を読むと得られる値は、 cookie の名前と値の組の群を ; で連結して一つの文字列にしたものです。 Cookie が一つもないときには、空文字列となります。

と DOM 1,2 仕様書に書いてあるのですが、 こんな説明で本当にいいのでしょうか。 これだけを読んで実装できる人なんているはずがない。

一応、 DOM 1 には更に name=value;expires=date という例が載っています。

[3] DOM 1 FE ではこの属性は読取専用ですが、 DOM 0 と DOM 2+ では書込むこともできます。 DOM 1 SE では読取専用ではなくなっていますが、 説明は DOM 1 SE とほとんど同じで、書くときの構文の説明がありません。

この属性に書くときの値は、 RFC 2965 の cookie (>>5) とするべき (should) です。

Cookie 名が既に使用されていれば、 新しい値と cookie 属性に置きかえられます。

Cookie 属性の既定値:

domain
現在の文書/枠の絶対URIhost
path
現在の文書/枠の絶対 URI の絶対 path 部分。
max-age
UA の既定値。

max-age0 なら、 当該名の cookie は削除します。

[4] >>3 で構文が不適切だと、 DOMException SYNTAX_ERROR が発生します。

保安性#

[13] 2004-04-27 - 「高木浩光@茨城県つくば市の日記」跡地 ( 版) http://d.hatena.ne.jp/HiromitsuTakagi/20040427

携帯電話のブラウザでは、どのみち完全なPC向けWebサイト対応は期待されていないのだから、この際思い切って、document.cookie機能を搭載しないでおいたらどうか。「セキュリティを重視して危ない機能は排除した」と主張すればよい。

一部の掲示板等でdocument.cookieが使われている(cookieで覚えさせたハンドルやメールアドレスを名前欄、E-mail欄に表示するため)が、JavaScriptを使わなくともCGI側で同じことを実現できるのだから、こんな機能はなくなってもかまわないはずだ。

関連#

[6] MathMLSVGHTMLDocument に相当する MathMLDocumentSVGDocument を持っているのですが、そいつらは cookie 属性は持っていないようです。

メモ#

[24] setTimeout + document.cookie - Ci.nsIZIGOROu - Mozilla 拡張機能勉強会 ( 版) http://moz-addon.g.hatena.ne.jp/ZIGOROu/20081009/1223567665

browserc
IE715981
Fx320000
Opera 9.519995
Safari 420000
Chrome 0.216065

まぁこの結果見ると 20,000 と言う結果が出るブラウザの方がひょっとしたらたまたまで、他のブラウザの結果が普通かもしれない。まぁその是非は置いといて少なくとも言える事は、20,000にならないブラウザは、setTimeout() に指定した関数内の処理も非同期になっていて、実行順序が保障されてないと考えられる。

メモ#

[25] [whatwg] HTML Cookie API ( 版) http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2010-February/025300.html

[26] クライアントサイドの巨大なクッキーとサーバーサイドのヘッダーサイズ制限の組み合わせによるDoSについて - デー ( ( 版)) http://d.hatena.ne.jp/ultraist/20120417/1334667427

[27] JavaScriptでdocument.cookieへのアクセスを禁止する - 金利0無利息キャッシング – キャッシングできます - subtech ( ( 版)) http://subtech.g.hatena.ne.jp/mala/20120709/1341819651

[28] [whatwg] HTML Cookie API ( (Ian Hickson 著, 版)) http://lists.w3.org/Archives/Public/public-whatwg-archive/2010Mar/0068.html

[9] Cookies Settings Observations ( (Daniel Appelquist 著, 版)) http://lists.w3.org/Archives/Public/www-tag/2015Jan/0185.html

[29] Bug 28393 – Determine which cookies to include before returning. ( 版) https://www.w3.org/Bugs/Public/show_bug.cgi?id=28393

[30] Remove the storage mutex · Issue #335 · whatwg/html ( 版) https://github.com/whatwg/html/issues/335

[31] Remove the storage mutex due to lack of implementation · whatwg/html@1b918cf ( 版) https://github.com/whatwg/html/commit/1b918cf72fcbba011f83b92ab5d1f483fb1cafa3

[32] Update integration with Encoding Standard · whatwg/html@6a31c26 ( 版) https://github.com/whatwg/html/commit/6a31c26cf12e39dab1a488e75dd56c03d6786d39

[33] Cleanup origin serialization · whatwg/html@5dcc1ee ( 版) https://github.com/whatwg/html/commit/5dcc1ee2124b5e54955845790bb47f5d1351d672

[34] Define "server-based naming authority" in terms of URL · whatwg/html@da7b5ba ( 版) https://github.com/whatwg/html/commit/da7b5baf5815754cc40387452ae41e989848032f

[35] Merge effective script origin into origin · whatwg/html@8a843f2 ( 版) https://github.com/whatwg/html/commit/8a843f2169a6864a3024c4329528dccb2051d275

[36] Use USVString for document.domain/referrer/cookie · whatwg/html@8170d82 ( 版) https://github.com/whatwg/html/commit/8170d82a2fc93c8ff7981c54aa4ccafd54204552

[37] 2012-07-09 - 金利0無利息キャッシング – キャッシングできます - subtech ( ()) https://subtech.g.hatena.ne.jp/mala/20120709

[38] Actions required to mitigate Speculative Side-Channel Attack techniques - The Chromium Projects () https://www.chromium.org/Home/chromium-security/ssca

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