子域 cookie,在父域请求中发送?

Posted

技术标签:

【中文标题】子域 cookie,在父域请求中发送?【英文标题】:sub-domain cookies, sent in a parent domain request? 【发布时间】:2011-04-21 09:21:07 【问题描述】:

子域 cookie 是否在父域 HTTP 请求中发送?

例如,假设我有 cookie:

Name     Value     Domain (not https)
ABC      1         .example.com
XYZ      0         foo.example.com
DEF      0         bar.example.com

XYZ@foo.example.com 和 DEF@bar.example.com 是否会在请求 http://example.com/content 和/或 http://QQQ.example.com/content 时在 HTTP 标头 cookies 中一起发送

【问题讨论】:

另见:Related Domain Cookie Attacks 【参考方案1】:

子域的 cookie 仅在设置为在其上一级带有前导点的域时才会被发送。因此,如果 www.example.com 设置了一个域为“.example.com”的 cookie,那么它就会被发送,否则不会。

另一种方式更令人困惑,***域中设置的 cookie 只有在具有前导点的情况下才会发送到子域,但如果您使用 Internet Explorer,它也会在没有前导的情况下发送它点 (ref)。

【讨论】:

【参考方案2】:

域值.example.com 中的前导点表示example.com 及其子域。如果没有前导点,则 cookie 仅对该特定域有效。

请注意,在设置 cookie 时,没有前导点的域值将在前面加上一个点。仅当 domain 参数未设置时,用户代理才会假定该 cookie 的当前域。

所以在这种情况下,如果请求http://example.com/,则只会发送.example.com 的cookie。但在http://foo.example.com/ 的情况下,.example.comfoo.example.com 的 cookie 都将被发送。在http://bla.foo.example.com 的情况下,只会发送.example.com 的cookie。

【讨论】:

不幸的是,这个技术被每个主流浏览器支持differently,所以我不推荐它。 @EfranCobisi “这种技术”是什么意思? 我的意思是从 cookie 域值中删除前导点作为原始问题的解决方案。这在理论上应该可行,但实际上该技术受到某些浏览器错误行为的限制(请参阅我的原始链接)。 @EfranCobisi 不幸的是,cookie 的 RFC 为 domain 属性发布了不同的声明。 RFC 2109:“明确指定的域必须始终以点开头。”,“[…] 如果 […] 域属性 […] 的值不存在,则用户代理拒绝 cookie(不应存储其信息)以点开头。”;与此相反,RFC 6265 声明“[...] 前导 %x2E ("."),如果存在,将被忽略 [...]”。 啊,这说明了一切。我怀疑它可能与 RFC 有关...感谢您指出这一点。【参考方案3】:

没有。反之亦然:-域 cookie 在 -域 HTTP 请求中发送。

【讨论】:

有没有办法阻止父域cookies在子域HTTP请求中发送? @Prachi:不是跨浏览器,不。原则上,如果您根本不设置domain,它们不应该继承到子域中。但 IE 不尊重这一点。

以上是关于子域 cookie,在父域请求中发送?的主要内容,如果未能解决你的问题,请参考以下文章

使用来自子域的请求发送 cookie

刷新窗口后,如何指示浏览器在请求中包含 cookie?

使子域读取父域会话

如何从没有子域的url中获取父域[重复]

从子域到父域获取异常

Safari不包含COOKIE到第二个CORS请求中