Cookieドメインのドットプレフィックスはどういう意味ですか?


93

ここに画像の説明を入力してください

違いは何であるlocal.test.comとは.local.test.com?スクリーンショットはChromeのものです。




user2864740からのコメント2016年9月26日16:44-リンクが切断され、明らかにerik.ioドメインが別のユーザーまたはドメインレジストラに渡されました。
qxotk

回答:


58

local.test.comドメインに使用されますが、.local.test.comサブドメインにも使用されます。


11
したがって、local.test.comには適用されませんがx.local.test.com、との.local.test.com両方に適用さlocal.test.comx.local.test.comますか?
ripper234 2012年

29
これは間違っていると思います。Cookieは、ドットの有無にかかわらず、すべてのダウンストリームサブドメインと共有されます。サブドメインは、親からCookieを「継承する」と考えることができます。したがって、example.comにCookieを設定すると、blog.example.comとmy.blog.example.comにCookieが設定されます。blog.example.comにCookieを設定すると、this.is.my.blog.example.comとその間のすべてのサブドメインにCookieが設定されます。しかし、継承と同じように、その逆は当てはまりません。blog.example.comにCookieを設定しても、example.comにはCookieが設定されません。
geddski 2014年

6
とはいえ、Cookieのドメインをまったく設定しない(または空の文字列に設定する)ことで、Cookieをホストだけに制限することができます。奇妙なことに、これはホスト(example.com)のみにCookieを設定し、そのサブドメインには設定しません。
geddski 2014年

8
別の答えに基づいて明確にするために、ドットは違いを生むために使用されましたが、現在はそうではありません。Cookieは、先頭のドットの有無にかかわらず、指定されたドメインの任意のサブドメインに送信されます。サブドメインに渡されるかどうかを実際に制御するのは、Cookieにドメインを設定するかどうかです。ドメインをまったく設定しない場合、Cookieはそれを発行した正確なドメインにのみ送信されます。特定性の低い親ドメインに送信されることはなく(たとえば、「local.test.com」は「test.com」へのリクエストに含まれません)、ドメイン値を設定した場合にのみ、一致するサブドメインに送信されます。
Triynko 2016年

4
@Triynko、あなたがクッキーを更新しようとしているとき、ドットは違いを生みます。すべてのルールを分離することはできませんでしたが、先頭のドットの有無によって結果が異なることがわかり、簡単ではありません。これがどのように機能するかはブラウザによって異なり、すべてが直感的というわけではありません。cookienameの先頭にドットがブラウザにあるかどうかを制御することは、私がこれまでに行った中で最も単純なプログラミングタスクではありません。
DanAllen 2017年

83

先頭のドットは、Cookieがサブドメインにも有効であることを意味します。それにもかかわらず、最近のHTTP仕様(RFC 6265)はこのルールを変更したため、最近のブラウザーは先頭のドットを気にする必要はありません。ドットは、非推奨のRFC2109を実装している古いブラウザで必要になる場合があります。

RFC6265セクション4.1.2.3

たとえば、Domain属性の値が「example.com」の場合、ユーザーエージェントはexample.com、www.example.com、およびwww.corp.exampleにHTTPリクエストを送信するときにCookieヘッダーにCookieを含めます。 com。(先頭の%x2E( "。")が存在する場合、その文字は許可されていなくても無視されますが、末尾の%x2E( "。")が存在する場合、ユーザーエージェントは属性を無視することに注意してください。 )


1
RFCの日付は2011年4月です。IE8とIE9はどちらも最初はその日付より前にリリースされ、残念ながら現在も使用されています。だから私の一番の推測(試していませんでした)は、先頭のドットが必要だということです。古いRFCでまだ実行されているブラウザの数の見積もりを知っている人はいますか?
BlaM 2016年

erik.io/blog/2014/03/04/definitive-guide-to-cookie-domainsは、サブドメインを含めたい場合に、互換性を高めるために先頭のドットを使用することをお勧めします。この互換性要件は減少し続けるだけです。(6255には必須ではありませんが、必須であり、最終結果は2109と同じです。)
user2864740 2016

12

記事からCookieドメインの決定的なガイドとwwwプレフィックスがあなたのウェブサイトをより安全にする理由

結論

定義は多少異なりますが、次のようにこれらの実装のいずれかについて単純化できます

  • Cookieにドメインが設定されていない場合、Cookieリクエストの正確なホスト名とのみ一致する必要があります。[注:これは、ドットのないドメインでSet-Cookieを返すこととは異なります!]サブドメインや部分一致はありません。これは、単にドメイン属性を含めないことを意味します–空のドメイン属性を設定することは無効です。残念ながら、Internet Explorerは、これをサブドメインとともにホスト名として扱っているようです。

  • Cookieにドメインを設定する場合、安全な選択は、.erik.ioのようにドメインの前にドットを付けることです。Cookieはすべてのサブドメインと一致します。

  • erik.ioのように、前にドットを付けずにCookieドメインを設定することは、RFC 2109実装では無効であり、他の実装で前にドットを付ける場合と同じ動作を生成します。サブドメインが含まれていない限り、Cookieを特定の明示的に設定されたドメインに制限する方法はありません。

その他の価値のある観察:
  • すべてのRFCで、指定されたCookieドメインは、通常の一致に従って、現在のホスト名と一致する必要があります。ドメインwww.erik.ioのCookieはerik.ioと一致しないため、erik.ioからの応答でwww.erik.ioのCookieを設定することは無効であり、前者の方が具体的です。

  • RFC 6265では、Set-Cookieヘッダーを解析するときに、ドメインは明示的に小文字になります。


1

「.local.test.com」の先頭のドットは、「Domain = local.test.com」(または同じ「Domain = .local.test.com」)が設定されたCookieをChromeがどのように表示するかを示しています。

「Domain = something」のないSet-Cookie定義は、先頭のドットなしでドメイン(= host)を表示します。

したがって、クロムの先頭のドットは、先頭のドットがサーバーから使用されたかどうかではなく、そのCookieの定義にサーバーからの「Domain = something」が含まれていたかどうかを反映していません。(もしあれば、Cookieはサブドメインにも送信されます)。

少なくともこれは私のテストが示していることです。Chromeはこれを読みやすくする必要があります。たとえば、Cookieを定義した正確な文字列とCookieがいつ受信されたかを表示します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.