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

标签 http cookies browser security

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

The Tangled Web请注意,对于 foo.example.com,此类 cookie 与 foo.example.com 设置的 cookie 基本上没有区别。但是根据the RFC , cookie 的域属性应该发送到服务器,这将使 foo.example.com 能够区分并拒绝由 evil.example.com 设置的 cookie。

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

最佳答案

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

真实世界的行为主要是由原始的 Netscape cookie_spec 定义的,但作为一个规范,这是非常有缺陷的,这导致了一系列浏览器差异,大约 -

  • 接受什么日期格式;
  • 如何处理多个匹配的同名cookie;
  • 非 ASCII 字符如何工作(或不工作);
  • 引用/转义;
  • 域匹配是如何完成的。

RFC 6265 试图清理这个烂摊子,并明确规定浏览器应该做什么。它没有说浏览器应该发送 domainpath,因为历史上没有浏览器这样做过。

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

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

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

*:有一种方法。尝试删除与您想要的 cookie 具有相同路径 设置的 cookie。如果 cookie 在您这样做时消失了,那么它一定有那些 domainpath 设置,所以原来的 cookie 没问题。如果那里仍然有 cookie,则它来自其他地方,您可以忽略它。如果没有 JavaScript,这样做很不方便、不切实际,而且也不是无懈可击的,因为原则上攻击者可能会同时删除他们注入(inject)的 cookie。

关于http - cookie 的域属性是否发送回服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12758187/

相关文章:

http - node.js http.get() 发出请求而不发送主机名

asp.net-mvc - 发送 HTTP header 后服务器无法设置状态 IIS7.5

perl - 服务器看不到 cookie

javascript - 如何检测浏览器是否支持 URL() 构造函数?

browser - 如何在不通过 Jenkins 服务器打开浏览器的情况下运行 Protractor e2e 测试?

python - 请求发布到 imgur

html - 将变量(cookie)从本地 html 传递到 UILabel - iOS

php - 保护 Cookie 和 session

javascript - 网站可以强制浏览器进入全屏模式吗?

http - WebSocket 是否与 HTTP/3 兼容