【问题标题】:How exactly is the same-domain policy enforced?同域策略究竟是如何执行的?
【发布时间】:2009-05-30 12:40:25
【问题描述】:

假设我有一个域js.mydomain.com,它指向某个IP 地址,而另一个域requests.mydomain.com 指向另一个IP 地址。从js.mydomain.com 下载的.js 文件可以向requests.mydomain.com 发出Ajax 请求吗?

现代浏览器究竟是如何执行同域策略的?

【问题讨论】:

    标签: ajax subdomain xss


    【解决方案1】:

    对您的问题的简短回答是否定的:对于 AJAX 调用,您只能访问与加载页面相同的主机名(和端口/方案)。

    有两种解决方法:一种是在foo.example.com 中创建一个URL,作为bar.example.com 的反向代理。只要主机名匹配,浏览器并不关心请求在哪里实际完成。如果您已经有一个前端 Apache 网络服务器,这不会太难。

    另一种选择是AJAST,它通过将脚本标签插入到您的文档中来工作。我相信这就是 Google API 的工作方式。

    您可以在此处找到关于同源策略的详细说明:http://code.google.com/p/browsersec/wiki/Part2

    【讨论】:

    • 谢谢!这很有帮助 - AJAST 看起来是个不错的选择。
    • FWIW,IE 通常不关心端口。 blogs.msdn.com/ieinternals/archive/2009/07/23/…
    • 还值得一提的是,IP 地址根本不重要(在任何浏览器中)——它只是确定来源的协议/方案、主机和(在某些情况下)端口。这意味着从同一个 IP 提供服务的两个不同来源可能不会通信,而跨多个 IP 提供服务的同一个来源可能进行通信。
    【解决方案2】:

    这不起作用,因为主机名不同。如果两个页面具有相同的主机、协议和端口,则认为它们来自同一来源。

    来自维基百科the same origin policy

    术语“原产地”是使用 域名,应用层 协议和(在大多数浏览器中)TCP 运行的 HTML 文档的端口 脚本。考虑两种资源 当且仅当同源 如果所有这些值都是 一样。

    【讨论】:

      猜你喜欢
      • 2011-02-12
      • 1970-01-01
      • 2010-12-09
      • 1970-01-01
      • 2016-06-13
      • 1970-01-01
      • 1970-01-01
      • 2010-12-30
      • 1970-01-01
      相关资源
      最近更新 更多