[3] Cookie 設定時の Domain
属性は、その Cookie
の対象となるドメイン名を指定します。 HTTP の Set-Cookie:
応答頭欄や
JavaScript の document.cookie
の設定時に用いられます。
[35] Domain
属性は、クッキーが送信されることになるホストを指定します。
>>34
[36] 例えば Domain=example.com
であれば、
example.com
, www.example.com
, www.corp.example.com
のようなホストに対する HTTP 要求でクッキーが送信されます。 >>34
.
[38] RFC 6265 の構文では先頭の .
は認められていません。また、先頭にあった場合には、
これを無視することになっています >>34, >>46。
.
[39] RFC 6265 の構文では末尾の .
(末尾の点) は認められておらず、あった場合には属性全体が無視されることになっています
>>34。
[40] Domain
属性を省略した場合、クッキーは起源鯖にのみ送られます。
>>34
Domain
属性が指定されていない場合は Cookie
応答を生成したホストの名前が指定されたとみなす >>1 とされていました。
RFC 6265 ではこれは誤った動作だけど利用者エージェントによってはそうすると述べられています
>>34。[41] 例えば example.com
が Domain
属性無しのクッキーを発行した場合、
example.com
への要求にはこれを送信しますが、 www.example.com
への要求ではこれを送信してはなりません。
.
が付かないので、ドメイン一致するのはそのドメイン自体だけになります
>>21。[72] HTTPサーバーが Host:
の検査などを十分行っておらず、
任意のドメイン名でアクセスできる状態になっていると、悪意のある者が自身の保有する DNS
ドメイン名に攻撃先の IPアドレスを割り当て、利用者をそのドメイン名に誘導することで、
攻撃先サービスのクッキーを当該ドメイン名下で発行させることができるかもしれません。
そのような攻撃を防ぐため、 Domain
属性は明示的に指定するべきかもしれません。
[70] セッションクッキーその他セキュリティー的に重要なクッキーでは、
Domain
属性を適切な範囲に設定するべきです >>71。
[47] 属性値が空文字列の場合、動作は未定義ですが、 属性を無視するべきです >>46。
[59] クッキーのドメインは、 Domain
属性の構文解析結果を使って次のように決定しなければなりません
>>51。
[6] Domain
で指定されたドメインに属するホストだけがそのドメインの
Cookie を設定することができます。 >>1
利用者エージェントは Domain
属性の範囲外の起源鯖からのクッキーを拒否します
>>34。
[42] 例えば、 foo.example.com
が起源鯖の場合、 Domain=example.com
や
Domain=foo.example.com
は認められますが、 Domain=bar.example.com
や
Domain=baz.foo.example.com
のクッキーは無視されます。 >>34
Domain
が request-host
とドメイン一致しない場合、 RFC 2965 では Domain
が
request-host の実効ホスト名とドメイン一致しない場合に、その Cookie
を蓄積してはならないとされていました >>23、>>24。.
を含まない文字列 H と Domain
の値 D
を使って HD
と表せる場合に、その Cookie
を蓄積してはならないとされていました >>23、>>24。[7] Domain
で設定するドメイン名には少なくても2つか3つの .
が含まれていなければなりません。基本的には3つ以上で、2つでもよいのは
.com
, .edu
, .net
, .org
,
.gov
, .mil
, .int
の7つの gTLD だけです。
>>1
[10] FQDN であることを明示する際に foo.example.
のように最後に .
を付けることがありますが、これと >>4 の処理モデルや >>7 の制約との関係は仕様上明確にされていません。
[4] 妥当な Cookie を探す際に、Cookie の Domain
属性と、 fetch しようとしている URL のドメイン名の部分とを比較します。
ここで末尾一致していれば、更に Path
の比較へと進みます。
>>1 一致していなければその Cookie は妥当ではなく、HTTP
要求の Cookie:
頭欄には含まれません。
[5] ここで末尾一致とは、
fetch しようとしているホストの完全修飾ドメイン名 (FQDN)
の末尾に Domain
属性の値が一致することをいいます。 >>1
[11] 仕様上明記されていませんが、ドメイン名は大文字・小文字を区別しないので、 この一致の際も差異は無視されるものと思われます。
Set-Cookie
の定義[31] RFC 2109, RFC 2965 では、利用者エージェントには異なるドメインのホストでのセッション情報の共有を可能な限り阻止するべき >>30, >>29 とのよくわからない要件が課されていました。
Set-Cookie2] の定義
[28] RFC 2109、RFC 2965 では利用者エージェントが返送する時に
Cookie:
に $Domain
属性として含めることになっていました。
[2] document.cookie の覚え書き - Ci.nsIZIGOROu - Mozilla 拡張機能勉強会 ( 版) http://moz-addon.g.hatena.ne.jp/ZIGOROu/20081001/1222845305
現在 test.example.com で実行してるとして、
document.cookie = "Z=1"; alert(document.cookie); document.cookie = "Z=2;domain=example.com"; alert(document.cookie); document.cookie = "Z=3;domain=test.example.com"; alert(document.cookie);は IE6, 7 の場合、最終的に "Z=3;Z=2" となるのだが、Fx3, Safari だと、"Z=1;Z=2;Z=3" となる。domain が省略された場合、test.example.com 相当で設定したとされるべきだと思うんだけど。
と思ったら、domain パラメータの挙動について見ている所が netscape の決めた奴と言う古い奴見てた事が判明。
- Domain=domain
- Optional. The Domain attribute specifies the domain for which the cookie is valid. An explicitly specified domain must always start with a dot.
RFC 2109 - 4.2.2 Set-Cookie Syntax
つまり、指定するなら "." から開始しないとだめぽって事。
省略した場合の挙動は、
Domain Defaults to the request-host. (Note that there is no dot at the beginning of request-host.)
RFC 2109 - 4.3.1 Interpreting Set-Cookie
"." を先頭につけないのが正しいと。
まぁこれらの結果分かるのは、domain 指定がある場合、別々の物として key-value のペアが管理されますよと考えられると。この挙動、IEとそれ以外でだいぶ異なるみたいなので注意
[43] 252342 – fix cookie domain checks to not allow .co.uk ( ( 版)) https://bugzilla.mozilla.org/show_bug.cgi?id=252342
[44] draft-pettersen-dns-cookie-validate-05 - Enhanced validation of domains for HTTP State Management Cookies using DNS ( ( 版)) http://tools.ietf.org/html/draft-pettersen-dns-cookie-validate-05
[66] draft-pettersen-dns-cookie-validate-05 - Enhanced validation of domains for HTTP State Management Cookies using DNS ( ( 版)) http://tools.ietf.org/html/draft-pettersen-dns-cookie-validate-05
[67] draft-pettersen-dns-cookie-validate-05 - Enhanced validation of domains for HTTP State Management Cookies using DNS ( ( 版)) http://tools.ietf.org/html/draft-pettersen-dns-cookie-validate-05
[68] RFC 2964 - Use of HTTP State Management ( ( 版)) http://tools.ietf.org/html/rfc2964#section-3.2
[69] Issue 56211 - chromium - chrome.cookies fails for localhost domains - An open-source project to help move the web forward. - Google Project Hosting ( 版) https://code.google.com/p/chromium/issues/detail?id=56211
[74] Intent to Deprecate and Remove: Non-ASCII characters in cookie domain attributes, https://groups.google.com/a/chromium.org/g/blink-dev/c/x3DY-PuZhNw
.
でなければならない >>14 とされていました。 また、 RFC 2965 の定義では、先頭が.
でなければ利用者エージェントが.
を補う >>16 とされていました。