【问题标题】:Is it possible to circumvent the same origin policy if you don't have control of the second origin?如果您无法控制第二原产地,是否可以规避同一原产地政策?
【发布时间】:2012-05-22 05:43:38
【问题描述】:

SO post 列出了许多规避此政策的方法。

但是,当您无法访问第二个来源时,我不知道这些是否适用。

特别是这个,第三个答案,您插入一个脚本,该脚本调用来自第二个来源的脚本。

<script src="http://..../someData.js?callback=some_func"/>

但总的来说,当您在源一...并且需要访问源二时,这些方法中的任何一种都允许规避吗?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    是的,您可以在不控制第二台服务器的情况下绕过同源策略,但如果没有第二台服务器所有者的合作,您就无法做到。通常,就像在您的示例中一样,这是通过与 JSONP 约定合作来完成的。如果不通过第一个服务器将请求代理到第二个服务器,则没有其他方法可以做到这一点。

    【讨论】:

    • 所以上面所有的例子都是合作的答案...我只是假设如果人类用户可以下载一个页面然后单击查看->源...我的脚本应该具有相同的功能.. .我只想读取 DOM 而不必访问我的服务器...似乎效率很低。
    • @CS_2013:假设您的公司有一个内部 IMAP 服务器,由于某种原因它使用基于主机的身份验证。现在,如果没有 SOP,任意网站都可以执行连接到该邮件服务器的 Javascript,发送一个也可以解释为 IMAP 命令链的 HTTP 请求并取回您的电子邮件。
    • 而我的服务器不能使用 file_get_contents (php) 做到这一点?
    • @CS_2013:不,因为它显然无权访问客户端的内部网络。
    • 那么我们在谈论不同的事情......b.c.如果我不能在客户端处理我需要的数据,我将使用 file_get_contents 在服务器端处理它
    【解决方案2】:

    显然这是不可能的,否则政策将毫无用处。这完全是为了防止您从第三台主机提取数据,这正是您想要做的。

    请注意,浏览器不知道什么是“私有”本地网络的一部分,什么是“公共”全球互联网的一部分。因此,此政策的存在是为了防止任意 Javascript 代码访问您本地网络上的资源。

    【讨论】:

    • 我可以通过服务器做到这一点...file_get_contents()..使用我的服务器...看不出有什么大的区别?
    • @CS_2013:不同的是你的服务器无法访问客户端本地网络上的资源。
    • ??如果人类可以请求页面并进行查看 ->page_source....为什么我的 .js 文件不能做同样的事情?
    • @CS_2013:这一切都是为了保护客户端本地网络上的资源。没有人可以强迫您手动加载页面并将源代码复制并粘贴到您信任的另一个页面中,但您肯定不希望它自动运行!
    • @JosephtheDreamer:不,这不是主要思想。如果有人设法对你进行 XSS 攻击,那么你的问题就更大了!例如,这个想法是任意网页不能只访问您的内部邮件服务器。
    【解决方案3】:

    不,这就是重点。只有当服务器明确允许通过 CORS 或 JSONP 之类的东西时,才能关闭 SOP。

    插入小脚本是一种攻击(无论您的意图是否良好)。如果我拥有一个域并且有人这样做,他们将被禁止并向当局报告。

    您最接近的方法是使用服务器端代理(即让您的 js 向您的服务器发出请求,而服务器又向第三方发出请求)。

    【讨论】:

      猜你喜欢
      • 2017-10-05
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      • 2016-01-17
      • 2012-12-16
      • 2012-02-28
      • 2021-03-20
      • 2020-12-05
      相关资源
      最近更新 更多