在subdomain.foo.com
上的某个页面上,我知道可以使用domain=foo.com
子句(或根据早期规范domain=.foo.com
)在JavaScript中设置Cookie,并拥有该Cookie适用于所有子域名。
当我在GitHub页面页面(例如yelp.github.io
)上打开Chrome中的开发者控制台并使用domain=github.io
子句尝试此操作时,Cookie无法设置({{ 1}}产生空字符串)。如果我省略document.cookie
子句,或者使用domain
,我似乎只能设置cookie。
我可以理解为什么GitHub会出于安全原因想要以这种方式限制cookie范围,但我不确定这实际上是如何工作的,或者我所看到的行为背后是什么。 domain=yelp.github.io
域名有什么特别之处吗?是否有应用的安全政策我不知道?或者我只是做错了?
github.io
答案 0 :(得分:2)
根据relevant specification(RFC 6265),如果从子域设置,则会拒绝使用Cookie作为公共后缀:
If the user agent is configured to reject "public suffixes" and the domain-attribute is a public suffix: If the domain-attribute is identical to the canonicalized request-host: Let the domain-attribute be the empty string. Otherwise: Ignore the cookie entirely and abort these steps.
注意:A"公共后缀"是一个由a控制的域 公共注册局,例如" com"," co.uk"和" pvt.k12.wy.us"。 此步骤对于防止attacker.com至关重要 通过设置cookie来破坏example.com的完整性 域名属性为" com"。不幸的是,这套 公共后缀(也称为"注册管理机构控制的域名") 随时间变化。如果可行,用户代理应该使用 最新的公共后缀列表,例如维护的列表 Mozilla项目http://publicsuffix.org/。
github.io
位于public suffix list。