Http cookie的域属性是否发送回服务器?

Http cookie的域属性是否发送回服务器?,http,cookies,browser,security,Http,Cookies,Browser,Security,如果evil.example.com将域属性设置为.example.com的cookie设置为,浏览器将在对foo.example.com的请求中包含此cookie 请注意,对于foo.example.com,此类cookie与foo.example.com设置的cookie在很大程度上无法区分。但是根据,cookie的domain属性应该发送到服务器,这将使foo.example.com能够区分并拒绝由evil.example.com设置的cookie 当前浏览器实现的状态如何?域是否随Coo

如果evil.example.com将域属性设置为.example.com的cookie设置为,浏览器将在对foo.example.com的请求中包含此cookie

请注意,对于foo.example.com,此类cookie与foo.example.com设置的cookie在很大程度上无法区分。但是根据,cookie的domain属性应该发送到服务器,这将使foo.example.com能够区分并拒绝由evil.example.com设置的cookie


当前浏览器实现的状态如何?域是否随Cookie一起发送回?

当前的Cookie标准是。此版本简化了
Cookie:
标题。浏览器只发送cookie
name=value
对,而不是域这样的属性。有关该标题的规范,请参见RFC第4.2节。此外,请参见第8.6节“弱完整性”,其中讨论了foo.example.com可以为.example.com设置cookie,而bar.example.com无法判断它不是自己设置的cookie。

RFC 2109和RFC 2965是对cookie处理进行标准化的历史尝试。不幸的是,它们与浏览器的实际功能毫无相似之处,应该完全忽略

真实世界的行为主要是由最初的Netscape cookie_规范定义的,但作为一个规范,它有很大的缺陷,这导致了一系列浏览器差异,包括-

  • 接受何种日期格式
  • 当有多个匹配项时,如何处理同名cookie
  • 非ASCII字符如何工作(或不工作)
  • 引用/逃避
  • 如何进行域匹配
RFC6265试图清理这一混乱局面,明确规定浏览器的目标。它并没有说浏览器应该发送
路径
,因为历史上没有浏览器这样做过

因为您无法检测到cookie来自父
(*),因此,如果您希望将cookie分开,您必须注意主机名,以避免重叠域-特别是对于IE,即使您没有设置
example.com
上的cookie集将始终继承到
foo.example.com

因此:如果您认为将来可能需要一个包含单独cookie的子域(该子域不应该能够从其父域读取敏感cookie),请不要为您的站点使用“无www”主机名;如果您确实需要一个完全独立的cookie上下文,以防止
evil.example.com
将cookie值注入其他
example.com
站点,那么您别无选择,只能使用完全独立的域名

另一种可能对某些攻击模型有效的方法是对您生成的每个cookie值进行签名,例如使用


*当前位置有一种方法。尝试删除具有与所需cookie相同的
路径
设置的cookie。如果执行此操作时cookie消失,则它必须具有那些
路径
设置,因此原始cookie是正常的。如果那里还有一块饼干,它来自其他地方,你可以忽略它。这在没有JavaScript的情况下是不方便的、不切实际的,也不是无懈可击的,因为原则上攻击者可以同时删除他们注入的cookie。

我相信Zalewski的书和他的书胜过任何RFC。浏览器对许多HTTP功能的实现是出了名的混乱和非标准。

您知道当前的浏览器是否遵循此RFC,并且不向域发送cookies吗?不,我不知道。你为什么不启动一个数据包捕获程序看看呢?然而,即使他们确实发送了数据,我也不确定你会如何使用它。CGI规范不包括将此信息传递给应用程序。例如,PHP的
$\u COOKIE
变量只包含名称和值,而不包含属性。感谢您提供详细答案。我在想,如果用作*.example.com的所有站点都由同一台服务器处理,那么服务器可能会删除HTTP响应,这些响应会尝试将域设置为“.example.com”的cookie,从而强制站点之间的隔离。但是我意识到cookies也可以从JavaScript设置,这打破了隔离。您是否知道服务器可以通过任何其他方式强制隔离*.example.com站点(而不是从完全不同的域名提供服务)?