使用Ajax跨域限制 - JSON

时间:2010-01-07 22:53:21

标签: javascript ajax json cross-domain

使用ajax请求(ht | x)ml时,您只能向同一个域发送请求。但是,如果您请求JSON,您可以将其发送到任何域。为什么呢?

我被告知这是为了安全,但为什么网站会通过ajax做一些恶意的事情而不是直接做有意义的事情。

4 个答案:

答案 0 :(得分:4)

查看此wikipedia article

JSON之所以“安全”是因为你必须通过回调传递它。远程站点将运行返回JSON,您的javascript库不会盲目地运行它,而是尝试将其传递给您指定的函数,如jsonpCallback( response )。由于您没有直接运行远程代码,因此您可以控制所有远程代码,并且所有这些代码都在世界范围内。

答案 1 :(得分:3)

它被称为JSONP的原因实际上与 JSON 本身没什么关系。执行跨域ajax请求就像在HTML网页中添加<script src="http://url.com/data.js></script>标记一样简单;这是JSONP和跨域ajax的基本概念。

所发生的是data.js文件由JavaScript解释。这使我们能够从data.js文件(位于另一个域)获取数据,例如,它加载了当前作用域中可用的函数。

答案 2 :(得分:1)

答案 3 :(得分:0)

直接在页面中注入JSON根本不安全。

您为加载的脚本提供对页面中资源的完全访问权限(数据,cookie,逻辑)。

如果注入的代码是恶意的,它可以在您的服务器上运行操作,将数据回发到他们的服务器(POST允许跨域,而不是响应,但无论如何都要发送数据),等等......

我们正在构建一个大量使用跨域访问的Web应用程序 为了解决这个问题,我们提出了一个相当简单的JSONP sandboxing解决方案。