22

我的好友 Carsten Lau 提出了一个关于如何读取跨域 cookie 的有趣想法。

情况:您想从域“A”中读取在域“B”上设置的 cookie。想法:从域“A”上的客户端,您对域“B”上的动态资源执行获取请求 - fe 图像或 javascript,在服务器“B”上实际上是一种能够读取 cookie 的编程语言像 PHP、Java 等。通过该请求,您发送一个唯一标识符,如会话 ID。因此,查看域“A”上的站点的客户端上的代码可能如下所示:

<img src="www.domainB.com/?getCookie.php?sessionID=1234">

现在到了有趣的部分,服务器 B 在服务器端读取域“B”设置的 cookie,并使用提供的 session-id 将结果写入域“A”可访问的 DB 或返回包含 cookie 信息的响应到域“A”上的客户端,然后通过 AJAX 将其发送到服务器“A”。

我很确定有一个我们还没有发现的缺陷。我个人认为服务器“B”将无法读取 cookie 信息,因为客户端浏览器 URL 指向域“A”,但当然上面解释的“getCookie”请求指向“B”。

请告诉我们您对它的看法,它为什么有效或为什么无效。让我大吃一惊的是,一个小小的概念证明是成功的。

4

2 回答 2

19

这是正常的,因为您可以控制 2 个域。顺便说一句,大多数网站都是这样实现跨域单点登录的。但是,如果您无法控制第二个域,则无法从中读取 cookie。

于 2013-04-24T13:49:00.083 回答
1

我整理了一个 NPM 包来帮助跨域 cookie/localStorage 的使用。我知道这篇文章有点老了,但我想我会分享一下,以防其他人需要帮助:

通过使用托管在域 A 上的 iframe,您可以将所有用户数据存储在域 A 上,并通过向域 A iframe 发布请求来引用该数据。

因此,域 B、C 等可以注入 iframe 并向其发布请求以存储和访问所需的数据。域 A 成为所有共享数据的中心。

通过域 A 内的域白名单,您可以确保只有您的依赖站点才能访问域 A 上的数据。

诀窍是将代码放在域 A 上的 iframe 内,该代码能够识别正在请求的数据。上述 NPM 模块中的自述文件更深入地介绍了该过程。

希望这可以帮助!

于 2020-03-30T22:45:01.690 回答