Samesite Cookie属性について、sub.example.comからのドメイン.example.comで同じサイト属性を持つCookieを設定した場合、それがother.example.comと同じサイトと見なされる場合、明確になりません。
Cookieの動作はCORSとは異なり、これを明確に明らかにするリソースを見つけるのに苦労しています。
SameSiteの「サイト」は、第2レベルのドメインmysite.comおよびトップレベルドメインmysite。com。
つまり、
login.mysite.com
からcdn.mysite.com
へのリクエストは、同じサイトのリクエストと見なされます。
[〜#〜] but [〜#〜]...ご想像のとおり、これで終わりではありません。この検証動作をわずかに変更する 公開サフィックスリスト があります。
どうして?ええと、レジストラやドメインの所有者ではなく、エンドユーザーがドメインの一部(サブドメイン)を制御するサイトが多数あるためです。例えば。 my-site.azurewebsites.net
。
プライバシーとセキュリティの観点から、my-site.azurewebsites.net
をスコープとするCookieをyour-site.azurewebsites.net
に送信しないでください。また、特定のURLがこのタイプであるかどうかをブラウザが判断するアルゴリズム的な方法がないため、ブラウザが同じサイトの検証動作を変更するためのパブリックサフィックスリストが作成されました。したがって、azurewebsites.net
は パブリックサフィックスリスト にリストされます。
したがって、パブリックサフィックスリストのサイトの場合、
my-site.azurewebsites.net
からyour-site.azurewebsites.net
へのリクエストはクロスサイトと見なされます。
仕様 について説明します。
"same-site"
の定義は次のとおりです。
ターゲットのURIのオリジンの登録済みドメインがリクエストのクライアントの"site for cookies"と完全に一致する場合、またはリクエストにクライアントがない場合、リクエストは「同じサイト」です。それ以外の場合、リクエストは「クロスサイト」です。
特定のリクエスト(「リクエスト」)に対して、次のアルゴリズムは「同じサイト」または「クロスサイト」を返します。
「リクエスト」のクライアントが「null」の場合、「同じサイト」を返します。
"site"を "request"のクライアントの"site for cookies"とします(次のセクションで定義)。
「ターゲット」を「リクエスト」の現在のURLの登録済みドメインとします。
「site」が「target」と完全に一致する場合は、「same-site」を返します。
- 「クロスサイト」を返します。
ご覧のとおり、コアはsite for cookies
とregistered domain
を比較することです。
registered domain
から始めましょう。
オリジンの"登録済みドメイン"は、オリジンのホストのパブリックサフィックスとその左側のラベルです。つまり、「 https://www.example.com "の場合、パブリックサフィックスは「com」であり、登録済みドメインは「example.com」です。この概念は [〜#〜] psl [〜#〜] でより厳密に定義されており、「有効なトップレベルドメインプラス1」(eTLD + 1)とも呼ばれます。
[PSL]「パブリックサフィックスリスト」、n.d。、 https://publicsuffix.org/list/ 。
ただし、 https://publicsuffix.org/list/ で確認できるように、github.io
もリストに含まれているため、パブリックサフィックスです。したがって、registered domains
およびhttps://me.github.io
のhttps://you.github.io
はme.github.io
およびyou.github.io
であり、registered domains
のhttps://me.example.com
および_ [SOMECODE]はhttps://you.example.com
です。 _は両方ともexample.com
です。
理由は、github.io
が https://publicsuffix.org/list/ にあるのに対し、example.com
は https://publicsuffix.orgにないためです。/list / 。
動き続けましょう。では、"site for cookies"
とは何ですか?
ここでの定義 であることがわかります
ユーザーエージェントのアドレスバーに表示されるURIは、ユーザーに直接公開される唯一のセキュリティコンテキストであるため、ユーザーが特定のWebサイトを信頼しているかどうかを判断するためにユーザーが合理的に信頼できる唯一の信号です。 そのURIのオリジンの登録済みドメインは、ユーザーが自分自身が相互作用していると信じる可能性が最も高いコンテキストを表します。このドメインに"top-level site"というラベルを付けます。
トップレベルのブラウジングコンテキストで表示されるドキュメントの場合、ここで停止できます。ドキュメントの「Cookieのサイト」はトップレベルのサイトです。
ネストされたブラウジングコンテキストで表示されるドキュメントの場合、[RFC7034]のセクション4で説明されている「複数のネストされたシナリオ」を説明するために、ドキュメントの祖先ブラウジングコンテキストのアクティブドキュメントのそれぞれの起源を監査する必要があります。ドキュメントの「Cookieのサイト」は、ドキュメントとその各祖先ドキュメントの発行元がトップレベルサイトと同じ登録済みドメインを持っている場合にのみ、トップレベルサイトです。それ以外の場合、「Cookieのサイト」は空の文字列です。
ドキュメント(「ドキュメント」)を指定すると、次のアルゴリズムは「Cookieのサイト」(登録済みドメインまたは空の文字列)を返します。
「トップドキュメント」を「ドキュメント」のブラウジングコンテキストのトップレベルのブラウジングコンテキストでアクティブなドキュメントとします。
「トップドキュメント」のサンドボックス化されたオリジンブラウジングコンテキストフラグが設定されている場合は、「トップオリジン」を「トップドキュメント」のURIのオリジンとし、それ以外の場合は「トップドキュメント」のオリジンとします。
「ドキュメント」を「ドキュメント」と「ドキュメント」の祖先ブラウジングコンテキストのアクティブドキュメントのそれぞれを含むリストとする。
「ドキュメント」の「アイテム」ごとに:
「アイテム」のサンドボックス化されたオリジンブラウジングコンテキストフラグが設定されている場合は「オリジン」を「アイテム」のURIのオリジンとし、それ以外の場合は「アイテム」のオリジンとします。
「Origin」のホストの登録済みドメインが「top-Origin」のホストの登録済みドメインと完全に一致しない場合は、空の文字列を返します。
「top-Origin」のホストの登録済みドメインを返します。
関連する定義は上記のとおりです。
例で終わります。
たとえば、ユーザーエージェントのアドレスバーに表示されるURIがhttps://me.github.io
の場合、https://you.github.io
からcross site
へのリクエストはhttps://me.github.io
になります。
ただし、ユーザーエージェントのアドレスバーに表示されるURIがhttps://me.example.com
の場合、https://you.example.com
からsame site
へのリクエストはhttps://me.example.com
になります。
違いは、registered domains
のhttps://me.github.io
とhttps://you.github.io
がme.github.io
とyou.github.io
であるのに対し、registered domains
のhttps://me.example.com
とhttps://you.example.com
は両方ともexample.com
です。
ターゲットURIの「登録済みドメイン」は、リクエストの「Cookieのサイト」の「完全一致」である必要があります。
「登録済みドメイン」とは次のとおりです。購入またはレンタルできるドメイン名、つまり パブリックサフィックス の1レベル下。
「Cookieのサイト」は通常、リクエストの「登録済みドメイン」でもあります。これは、ドキュメントが「トップレベルのブラウジングコンテキスト」にある場合、つまりほとんどのサイトに当てはまります。 「ネストされたブラウジングコンテキスト内の」ドキュメントの場合のみ、追加の要件は「ドキュメントとその各祖先ドキュメントの生成元がトップレベルサイトと同じ登録済みドメインを持っている」ことです。
要するに:サブドメインはカウントされません。登録可能なドメインを比較する必要があります。