2

我注意到,当从subdomain1.example.comsubdomain2.example.com发送 ajax 请求时,即使它们具有 SameSite=lax 或 SameSite=strict 属性,也会包含来自subdomain2的cookie 。这与跨无关域(例如example1.com -> example2.com)的请求不同,后者在 SameSite 属性存在时不包含 cookie。

在这两种情况下,我都使用未设置域属性的 Set-Cookie 标头在服务器端创建 cookie。据我了解,在这种情况下,cookie 与客户端的域相关联。但是,兄弟域似乎被视为一个域。

我的诊断似乎得到了铬项目中的这个测试的证实:

 EXPECT_TRUE(CompareDomains("http://a.x.com/file.html",
                             "http://b.x.com/file.html"));     // x.com

https://github.com/chromium/chromium/blob/master/net/base/registry_controlled_domains/registry_controlled_domain_unittest.cc

这种行为是故意的还是我的测试中有一些缺陷?是否可以为兄弟域实现 cookie 隔离,或者如果有这样的要求,那么我需要使域不相关?

4

1 回答 1

3

出于该SameSite属性的目的,该站点映射到“可注册域”。来自https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-cookie-same-site-00

源的“可注册域”是源主机的公共后缀加上其左侧的标签。即“ https://www.example.com”的可注册域是“ example.com”。

公共后缀(大部分)是标签+顶级域(例如www.example.com)或标签+通过公共后缀列表注册的东西(例如example.github.ioexample.appspot.com)。

任何不被视为跨站点请求的子域,例如widgets.example.com包含在<iframe>from中的子域example.com仍位于同一站点上:example.com

域不被视为安全边界,因为一方控制example.com. 一个站点被认为是一个不同的边界,因为project1.github.io它不同于project2.github.io.

于 2019-10-15T17:18:45.263 回答