在没有服务器端脚本的情况下绕过 javascript 中的同源策略

IT技术 javascript cross-domain same-origin-policy
2021-03-09 00:36:48

我的环境实际上不允许服务器端脚本编写(在服务器上“安装”脚本非常困难)。我尝试使用 iframe 来违反 javascript 的同源策略;然而,这没有用。还有其他我不知道的解决方法吗?

谢谢!

2个回答

正如David Dorward所说,JSON-P 是最简单、最快的;然而,还有另一个技巧,特别是使用两个 iframe。

两个不使用JSONP解决这个问题,你可以执行以下操作。此技术假定您对父页面具有某种开发访问权限。

在两个域/站点上有三个页面。

  1. 父页面
  2. 内容页
  3. 跨域通信页面(又名“xdcomm”)

父页面和 xdcomm 页面托管在同一域中,内容页面托管在任何其他域上。内容页面作为 iframe 嵌入到父页面中,而 xdcomm 页面作为隐藏的 iframe 嵌入内容页面中。

在此处输入图片说明

xdcomm 页面包含一个非常简单的脚本,用于检测查询字符串中的 GET 参数,解析该字符串的methodargs变量(其中args是 JSON 编码的字符串),然后在父页面中使用指定的参数执行指定的方法。一个例子可以在这里看到(查看源代码)。

尽管 JavaScript 的同源策略限制一个域上的代码访问另一个域上的代码,但域是否相互嵌套(域 A、嵌套在域 B 中、嵌套在域 A 中)并不重要。

因此,简而言之,内容页面通过将 iframe 的源更改为类似http://domaina.com/xdcomm.html?src=foo&args=[1,2,3,4]. 这相当于foo(1,2,3,4)在父页面中执行

另外,要知道已经有一些库可以帮助您解决这个问题,例如easyxdm我在这里解释的是他们使用的其中一项技术的基础,虽然它可能没有那么花哨,但它肯定是一个功能齐全的轻量级实现。

其实是的请告诉我!!:)
2021-04-25 00:36:48
easyXDM 对我来说似乎并不容易。这是一个相当沉重的库,看着它的代码文件夹头晕目眩,找不到“从跨域获取json”的简单示例,而且它似乎最终依赖于Flash。我最终使用 YQL,如下所述。
2021-05-02 00:36:48
我实际上要写一些比较完整的东西。过一会再来检查。
2021-05-07 00:36:48
您能否提供工作示例,或将我链接到 1 已经存在?- (我会很高兴)。我对纯 JavaScript 解决方案感兴趣,没有库、脚本或类似的东西。我试着自己找例子。可悲的是,我发现最好的解决方案是这个解决方案 - ternarylabs.com/2011/03/27/... - 但我不知道如何使用它,从嵌入式iframe. 如果满足我的要求有点不可能,请告诉我,我会创建一个新问题。
2021-05-07 00:36:48
@Justin Johnson,不,但它无济于事 - 我无法修改/添加助手(或其他)到我想连接的外部服务器,所以 iframe 没有用。我设法解决了我在jsonp那里允许的问题
2021-05-10 00:36:48

希望不会,因为这将是一个安全漏洞!:)

但是,如果您的两个站点都是同一个域上的子域,则document.domain可能会有所帮助。

我也意识到这是一个安全漏洞;然而,我希望有一个洞哈哈哈。如果您考虑使用代理可以解决此问题。我不明白为什么允许使用代理而不允许直接访问文件。我也听说 html 5 有一些属性也允许跨域的东西。
2021-04-17 00:36:48
代理不会将用户 cookie 或任何其他身份验证数据发送到远程站点 - 因为它无法知道它们是什么。它只能获取网站无论如何都可以获得的数据。它不能假装是用户。正在进行开发权限系统的工作,以便 XHR 可以访问远程站点,目前浏览器支持较弱。
2021-04-20 00:36:48
因此,例如,如果我的域是 awesome.yahoo.com,并且我正在尝试访问 bob.yahoo.com,我可以将 document.domain 设置为 yahoo.com,然后就可以访问 bob.yahoo.com?
2021-04-30 00:36:48
啊啊有道理。我没有考虑过那种类型的东西。
2021-05-14 00:36:48