subdomain.example.com可以设置example.com可以读取的Cookie吗?


26

我简直不敢相信这很难确定。

即使已经阅读了RFC,但我仍然不清楚subdomain.example.com上的服务器是否可以设置example.com可以读取的cookie。

subdomain.example.com可以设置Domain属性为.example.com的cookie。RFC 2965似乎明确声明不会将此类cookie发送到example.com,但是同样表示,如果您设置Domain = example.com,则会在前面加上一个点,就好像您说的是.example.com。综上所述,这似乎是说,如果exam​​ple.com返回设置了Domain = example.com的cookie,那么它不会收回该cookie!那是不对的。

谁能澄清规则的真正含义?


该问题在被询问时应该已经关闭/迁移了,但是由于它引起了很多关注,因此我将锁定它而不是关闭它。请在正确的网站上查看stackoverflow.com/questions/3089199/…以了解欺诈。
克里斯S

Answers:


30

引用与您阅读的相同的RFC2109

       *来自请求主机x.foo.com的Domain = .foo.com的Set-Cookie将
         被接受。

因此subdomain.example.com可以为设置Cookie .example.com。到目前为止,一切都很好。

       以下规则适用于从中选择适用的Cookie值
       用户代理拥有的所有cookie中。

       域选择
            原始服务器的标准主机名必须与域匹配
            Cookie的Domain属性

那么我们有一个域名匹配吗?

   * A是FQDN字符串,格式为NB,其中N是非空名称
     字符串,B的形式为.B',而B'是FQDN字符串。(因此,xycom
     域匹配.y.com,但不匹配y.com。)

但是根据定义,现在example.com不会进行域匹配.example.com。但是www.example.com(或域中任何其他“非空名称”)都可以。该RFC在理论上已被RFC2965淘汰,后者规定了在Set-Cookie2操作域上强制使用前导点的事情。

正如@Tony所指出的,更重要的是真实世界。要了解实际的用户代理正在做什么,请参阅

Firefox 3的nsCookieService.cpp

Chrome浏览器的cookie_monster.cc

对于观点纳入什么实际的网站都在做,尝试演奏wget使用--save-cookies--load-cookies以及--debug看看发生了什么事情。

您可能会发现,实际上,大多数站点都使用Set-Cookie旧的RFC规范中带有“主机”值的某种组合,隐含地没有前导点(如twitter.com那样)或设置域值(有前导点)并重定向像一台服务器www.example.com(如google.com一样)。


那么www.example.com和example.com(通常指向同一网站)如何使用相同的Cookie?领先。在大多数浏览器中都不需要,否则这种常用用法将无效。
JamesRyan 2010年

前导点仅由最新的RFC强制。example.com可以为“ example.com”和“ .example.com”设置cookie;后者可以通过www.example.com阅读。使用显示的wget命令查看正在发生的事情。
麦地那2010年

@medina,可以在用户的Cookie x1.yz和阅读x2.yz
Pacerier 2013年

@Pacerier只有(1)设置的cookie y.z和(2)的用户代理实现了RFC 6265.
迈克尔·汉普顿

@MichaelHampton,浏览器不执行RFC 6265吗?
Pacerier

2

如果浏览器实现了RFC 6265(此时任何现代浏览器都应这样做),则为其设置的cookie .example.com将忽略前导点(第5.2.3节),然后将cookie发送到裸域和所有子域。

如果您的旧浏览器有大量流量,请不要依赖此行为;该RFC只能追溯到2011年。


1

这应该是不可能的。但是,正如您所说,由于这不是广泛记录的标准,因此取决于您所使用的软件。

大多数现代浏览器都遵循已定义的“ Web安全模型”。该模型有效地控制了浏览器在Cookie之类的行为方面的安全性(特别是如何将其发送回任何给定的网站)。该模型还具有以下规则:“浏览器不会将cookie发送给未设置它们的域名”。

话虽如此,domain.com应该能够为js.domain.com设置cookie。但是,js.domain.com只能为其设置cookie。但这全取决于您使用的浏览器。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.