【问题标题】:Is it possible to isolate domain.ext, sub1.domain.ext and sub2.domain.ext’s cookies from one another?是否可以将 domain.ext、sub1.domain.ext 和 sub2.domain.ext 的 cookie 相互隔离?
【发布时间】:2010-11-01 23:46:31
【问题描述】:

我正在开发一个从 domain.ext 提供的网络应用程序。此 Web 应用程序使用基于 cookie 的会话,并为用户提供了在子域上托管包含自定义 JavaScript 的网页的能力,例如。 sub1.domain.ext,sub2.domain.ext。子域不使用 cookie 支持的会话。

鉴于此设置,是否可以确保以下几点?:

  1. sub1.domain.ext 的用户无法读取或写入 domain.ext 的 cookie(即 domain.ext 会话不能被嵌入在 sub1.domain.ext 页面中的 JavaScript 窃取或劫持)。
  2. 嵌入在 sub1.domain.ext 页面中的 JavaScript 无法读取或写入 sub2.domain.ext 的 cookie,反之亦然。

我已经测试了一些东西,例如,通过在 sub1.domain.ext 的窗口中运行 document.domain = 'domain.ext' 似乎可以与来自 sub1.domain.ext 的 domain.ext 的 cookie 进行交互。有没有办法防止这种情况发生,例如在从 domain.ext 设置域时指定某种策略?

【问题讨论】:

  • 您可以强制您的domain.ext 重定向到www.domain.ext。这应该保护在那里创建的 cookie,因为它被视为另一个子域.. (untested)
  • 谢谢,盖比。我认为这就是我最终不得不做的事情,尽管我喜欢将我所有的 URL 标准化为非 www 变体(我认为这很丑,但这只是我的看法)。
  • 我也更喜欢非 www。但是对于这种情况,你不能避免它..
  • 我怕你会这么说!谢谢你的帮助:)

标签: javascript cookies


【解决方案1】:

您不能通过设置domain 参数来指定cookie 只对example.com 有效。如果设置domain=example.com,则对*.example.com有效。

example.com 上设置cookie 没有 domain 参数在大多数浏览器中只为example.com 设置一个cookie。但不是 IE。

因此,如果您想要拥有具有单独 cookie 上下文的子域,您应该从 www.example.com 提供您的网站。正如 Gaby 所说,通过将 301 重定向到 www 版本,您当然仍然可以通过 example.com 支持访问。

【讨论】:

  • 谢谢,博宾斯。我在想我们可以在 domain.ext 上为面向公众的(cookie/session-less)站点提供服务,其中 www.domain.ext 301-ing 到 domain.ext。然后我们可以在 manage.domain.ext 或 panel.domain.ext 上托管实际的应用程序。
  • 是的,如果 domain.ext 从不设置 cookie,那么裸域是可以的。不过需要注意的一点是:虽然sub1.domain.ext 无法读取来自sub2.domain.ext 的cookie,但它可以设置domain.ext 上的cookie,该cookie 将被读取sub2.domain.ext 如果 sub2 尚未设置更具体的 cookie。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-03
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-04
  • 1970-01-01
相关资源
最近更新 更多