【问题标题】:Strange Javascript/cross site cookies problem奇怪的 Javascript/跨站 cookie 问题
【发布时间】:2009-07-23 22:24:44
【问题描述】:

我有一个在域 B 上运行的 PHP 脚本,当调用它时会生成一些 JS。

这个想法是在给定的 html 页面中我可以拥有:

<script src="http://b.domain/myscript.php"></script>

所以页面加载的时候,会调用脚本,生成JS并在本地页面运行。

问题在于 myscript.php 依赖于 B 的域 cookie。如果我在地址栏中输入http://b.domain/myscript.php,脚本可以正常工作,并且我会在浏览器窗口中看到 JS 文本。

但是当我将上面引用的行包含在运行在不同网络服务器上的网页中时,将其称为 A,它不起作用。 JS 仍然生成,但不正确,因为脚本没有可用的 cookie。

所以,简而言之,直接访问脚本,cookies可用,一切都好。 通过从另一个域提供的页面的调用访问脚本,它无权访问 cookie。

我不明白为什么在调用 B 域上运行的脚本时,浏览器似乎没有发送 B 的 cookie?

【问题讨论】:

  • 提供操作系统和浏览器版本可能有助于获得答案。还是在所有浏览器中都会发生这种情况?
  • 浏览器是 Firefox(最新版本),域 A 是我本地机器 (WinXP) 上的 apache,域 B 是 Redhat linux 机器上的 apache。对 firebug 的快速检查表明 B 的 cookie 没有包含在对 myscript.php 的调用中

标签: javascript cookies


【解决方案1】:

这是一项安全功能。 Cookie 信息永远不会提供给设置 cookie 的域以外的域。请参阅:http://en.wikipedia.org/wiki/Cross-site_scripting 了解更多信息。

【讨论】:

  • 但是在 B 上运行的脚本只需要 B 的 cookie。不需要将 cookie 发送到设置它们的域以外的任何域。
  • 脚本来自哪个服务器并不重要;该脚本只能使用来自 page 的域中的 cookie。否则,例如,我可以在我的网站上包含一个托管在 Google Code 上的脚本,当您访问该页面时,我的网站可以使用该脚本窃取您的 Google cookie,从而使我可以访问您的 GMail 帐户。
  • 该脚本不使用cookies - 仅生成客户端JS的服务器端脚本在原始页面上运行。
猜你喜欢
  • 2016-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多