我可以读取/访问/收听来自其他域的 cookie 吗?

问题描述

我有一个站点 cookie 问题,比如我是否可以从父窗口或顶部窗口读取/访问/收听 cookie?

假设我的页面是 1234.com,我被放入一系列域内的嵌套 iframe 中,例如 abc.com > def.com,最后被渲染到 xyz.com

我知道由于跨域限制,我无法在 1234.com 的首页 (xyz.com) 上设置 cookie,但是有什么方法可以读取或访问或收听 cookie 并制作同义副本在我的网站内?

示例:假设来自 Chiacgo 的用户 MALE(25-30 岁)(cookie_id=male25)正在阅读页面 xyz.com,其中在 iframe 中也加载了我的页面 1234.com。现在我知道 1234.com 只能在 iframe 上设置 cookie,因此,我在这里尝试实现的 -

1234.com 能够读取/侦听 xyz.com (cookie_id=male25) 的 cookie,并且何时将 cookie 写入 iframe (cookie_id=1234) 能够写入父 cookie 的精确副本或匹配以某种方式,以便我可以在我的一端使用 1234 cookie 来定位具有 cookie_id=male25 的相同匹配用户

我在考虑像 iframe Busting 这样的技术,以防它有助于打破 iframe 打开我的 1234.com 不受阻碍地访问 window.top,这将允许我读取/访问/侦听和写入我自己的 cookie。

你觉得有什么可能吗? 即使我想以道德/非道德的方式了解它是否可能,如果这可能的话。

作为发布商,我们如何防止这种情况发生在我们的网页上?

解决方法

绝对不会。

出于安全原因,您可以也永远无法读取不是来自您的域的 cookie。

想想如果可以的话会产生的后果:例如,人们通过某些 OAuth 服务登录您的网站,基本上会将所有 cookie 数据“丢失”到您网站的 JavaScript 上下文中,因为您的网站恰好包含一些 iframe/来自另一个域的图像/脚本。它将能够读取所有 cookie 值并复制例如可能存储在其中的登录会话。

如果两个域都希望按照您的描述协调数据交换,我建议您查看 Window.postMessage。 PostMessage 允许页面安全地向其父级或开启者发送消息,然后允许接收者通过检查消息的来源来接受或拒绝这些消息。

在您的示例中,外框可以将包含 currentUser 人口统计信息的 postMessage 广播到其中包含的任何 iframe,并且这些 iframe 可以注册一个侦听器以接收该信息。