0

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

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

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

示例:假设一个用户,来自 Chiacgo 的男性(25-30 岁)(cookie_id=male25)正在阅读页面 xyz.com,在 Iframe 中我的页面 1234.com 也被加载。现在我知道 1234.com 只能在 iframe 上设置 cookie,因此,我在这里想要实现的目标是 -

1234.com 能够读取/收听 xyz.com 的 cookie (cookie_id=male25) 并且何时将 cookie 写入 iframe (cookie_id=1234) 能够写入父 cookie 的精确副本或将其匹配到这样我就可以使用 1234 cookie 来定位与 cookie_id=male25 相同的匹配用户。

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

你认为如果有这样的可能吗?即使我想知道它是否可能以道德/非道德的方式进行,如果这可能的话。

同样作为发布者,我们如何防止这种情况发生在我们的页面上?

4

1 回答 1

1

绝对不。

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

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

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

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

于 2021-05-24T18:20:22.167 回答