0

我有一个网站,我正在开发我的 REST 端点:

https://prefixone.somesite.com

我还有另一个网站正在开发我的 UI 框架:

https://prefixtwo.somesite.com

我可以成功登录并在 IE 中获得 200 响应。在 FF 和 Chrome 中,我得到一个“不允许的 405 方法”。Chrome 通过说“XMLHTTPRequest 无法加载 XXXXXXXXXXX。Access-Control-Allow-Origin 不允许来源 xxxxxxxxxxx 来阐明这种情况。

这两个网站都在 somesite.com

这种情况是否仍然符合 XSS 的条件?

4

3 回答 3

2

您的问题是“为什么我仍然会收到 405,即使两个网址都是 XXXX.com 的形式?”,但实际上,您的网址不是来自同一个域。

xxx.yyyy.com并且zzz.yyyy.com不是同一个域。他们可能共享他们名字的重要部分,但他们并不相同。

这是因为域内子域的所有者完全有可能由完全独立的人操作。考虑uk.com。该域名的所有者将其中的三级域名作为标准英国国家级域名的竞争对手出售co.uk

位于xxx.uk.com和的站点zzz.uk.com是完全不同的站点,您不会期望前者能够在不违反相同来源策略规则的情况下从后者加载内容。

浏览器不知道哪些域会执行此操作,哪些域不会执行此操作,因此它会安全行事并假设任何两个子域都可以由不同的人操作。

甚至yyyy.comwww.yyyy.com不被认为是一回事。

我希望这能回答你的问题。

至于该怎么办......

1)将所有内容放在同一个子域上。将站点拆分为多个子域的最常见原因是为了提高性能,但除非您使用的是 Google 或 Facebook,否则它不太可能对您的性能至关重要,而且您可能首先可以做的其他事情会更有帮助。此外,新的 SPDY 协议(即将演变为 HTTP v2)将使该技术过时。

2) 如果您必须将其拆分为多个子域,您可能需要考虑使用可以放置在每台服务器上的crossdomain.xml 文件,以授予它们访问彼此内容的显式权限。

于 2012-08-12T22:10:14.097 回答
0

基本上在您的代码中,您需要在 JavaScript 中运行以下命令:

document.domain = "somesite.com";

这将告诉浏览器,出于同源策略的目的,应该重要的部分somesite.com不是前缀部分。

在 Google 上查找“文档域”以获取更多信息。

于 2012-08-11T23:44:43.967 回答
0

同源政策限制了这一点。顾名思义,它适用于起源,而不是域。来源是一个完整的域名+协议+端口号。因此,如果它们在不同的端口或协议上,即使在同一主机上运行的两个页面也无法通信。

如果您计划仅支持较新的浏览器,请考虑添加 x-access-control 标头。如果您需要支持较旧的浏览器,请查看 easyXDM 之类的东西。

于 2012-08-12T21:36:50.693 回答