子域 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.com
和foo.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,在父域请求中发送?的主要内容,如果未能解决你的问题,请参考以下文章