使用ajax请求(ht | x)ml时,您只能向同一个域发送请求。但是,如果您请求JSON,您可以将其发送到任何域。为什么呢?
我被告知这是为了安全,但为什么网站会通过ajax做一些恶意的事情而不是直接做有意义的事情。
答案 0 :(得分:4)
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)
这是一个为什么有人会破解AJAX请求的例子。
https://blog.codinghorror.com/preventing-csrf-and-xsrf-attacks/
http://directwebremoting.org/blog/joe/2007/04/04/how_to_protect_a_json_or_javascript_service.html
答案 3 :(得分:0)
直接在页面中注入JSON根本不安全。
您为加载的脚本提供对页面中资源的完全访问权限(数据,cookie,逻辑)。
如果注入的代码是恶意的,它可以在您的服务器上运行操作,将数据回发到他们的服务器(POST允许跨域,而不是响应,但无论如何都要发送数据),等等......
我们正在构建一个大量使用跨域访问的Web应用程序 为了解决这个问题,我们提出了一个相当简单的JSONP sandboxing解决方案。