【问题标题】:Understand cross domain stuff and AJAX了解跨域的东西和 AJAX
【发布时间】:2013-02-24 02:07:57
【问题描述】:

我对与跨域相关的两件事有点困惑。

假设我有 2 个域; mydomain.com 和 otherdomain.com

现在在 mydomain.com 上,可以从 otherdomain.com 访问的所有内容是什么? 我的意思是我们可以有

<img src="otherdomain.com/xyz.jpg">

同样我们可以在 iframe src 中直接使用 otherdomain.com 吗?默认情况下允许什么? 有什么办法可以阻止 otherdomain.com 的访问?

第二部分与 JavaScript/AJAX 有关。 在脚本相关的东西中默认阻止其他域的东西吗? 使用 AJAX,我可以默认向 otherdomain.com 发出请求吗?是否允许?如果不允许,如何从 otherdomain.com 获得响应?

非常感谢。

【问题讨论】:

标签: javascript ajax xss same-origin-policy


【解决方案1】:

阅读Wikipedia

你不能从另一个域读取(除非它允许你这样做)。

您可以显示或执行来自另一个域的内容(例如,使用图像、框架或脚本标签),但您不能直接从您的代码中读取它。
因此,您无法向另一个域发送 AJAX 请求,也无法读取从另一个域加载的图像、框架或脚本标记的内容。

【讨论】:

  • 实际上,如果另一个域设置正确,您可以将 AJAX 与另一个域一起使用——一种称为cross-origin resource sharing 的技术。
  • @TedHopp:这就是我说unless it allows you to的原因。
  • 不清楚限定词是否适用于您的最后一句话。例如,它可以解释为适用于&lt;img&gt; 标签。 (服务器可以根据引用页面阻止对任何资源的访问。)
  • 其实可以发出ajax请求。但只有在允许的情况下才阅读响应。
【解决方案2】:

我们可以有&lt;img src="otherdomain.com/xyz.jpg"&gt;

是的,我们可以拥有此资源以及任何其他资源,例如图像、视频和音频文件、zip、pdf ...

我们可以在 iframe src 中直接使用 otherdomain.com 吗?

我可以默认向 otherdomain.com 发出请求吗?允许吗?

没有。出于安全考虑

如何从 otherdomain.com 获得响应,如果不是 允许吗?

如果你拥有 otherdomain.com,你可以使用 jsonp 和一些 php 的东西。

http://remysharp.com/2007/10/08/what-is-jsonp/

【讨论】:

    【解决方案3】:

    可以从 otherdomain.com 访问的所有内容是什么?我的意思是我们可以有&lt;img src="otherdomain.com/xyz.jpg"&gt;

    您需要区分“显示”和“访问”。您可以包含图像,但由于same-origin-policy (SOP),您无法访问它的数据。

    同样我们可以在 iframe src 中直接使用 otherdomain.com 吗?什么都是默认允许的?

    您可以包含可以链接的所有内容,从样式表、脚本、图像到通过框架的整个页面。从其他域执行脚本实际上是一种标准的获取数据的方法,称为JSONP;并且包含来自第三方 CDN 的资源也很常见。

    如何防止 otherdomain.com 的用户访问?

    您可以使用X-FRAME-OPTIONS-header 来防止通过框架包含,大多数浏览器都应该尊重这一点。

    您可以尝试避免使用错误的 REFERER 标头来回答请求(发送 404 内容),但这不是一种可靠的方法,因为 REFERER 经常被浏览器禁用或被防火墙阻止。

    第二部分与 JavaScript/AJAX 有关。在脚本相关的东西中默认阻止其他域的东西吗?使用 AJAX,我可以默认向 otherdomain.com 发出请求吗?允许吗?

    不,对数据的访问被阻止。您可以发送请求,但除非发送 CORS headers 以明确允许,否则您的脚本将无法获得响应。

    如果不允许,如何从 otherdomain.com 获得响应?

    您可以在 mydomain.com 上使用proxy

    【讨论】:

    • 非常感谢...您能否详细说明您所说的要点...例如您说无法访问图像数据时...这是什么意思?同样对于远程脚本执行,JSONP 是唯一的选择吗?另外我如何实际实现 X-FRAME-OPTIONS ?另外,如何设置 CORS 标头以允许从其他域访问?
    • “图像数据”是指访问像素数据,例如将图像绘制到画布上时。 “远程脚本执行”可以是任意脚本,JSONP 只是它的一个应用。对于其他事情,搜索一些关于它们的教程/SO 问题,网上有很多关于它们的信息。
    猜你喜欢
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 2012-12-21
    • 2013-06-03
    相关资源
    最近更新 更多