jQuery教程(25)-ajax操作之安全限制

文章标签: jquery-ajax,jquery
2015-1-17 19:01:03     58 人阅读    

安全限制
         尽管构建动态的Web应用程序非常实用,但XMLHttpRequest (jQuery的Ajax实现背后的底 层浏览器技术)常常会受到严格限制。为了防止各种跨站点脚本攻击,一般情况下从提供原始页 面的服务器之外的站点请求文档是不可能的。


         这通常都是一种积极的情形。例如,对接收到的JSON数据,可以调用eval()来解析(相对 而目,jQuery.parseJSON()更安全一些)。如果数据文件中存在恶意代码,那么通过eval() 解析就会执行这些恶意代码。不过,JavaScript的安全模型会限制数据文件必须与网页保存在相同 的服务器上,这样就可以保证数据的可靠性。


          但是,从第三方来源中加载数据往往是很有必要的。因而,也有许多方式可以绕过上述安全 限制,即能够实现通过Ajax请求取得其他站点的数据。
            其中一种方法是通过服务器加载远程数据,然后在客户请求时提供给浏览器。这是一种非常 有效的手段,因为服务器能够对数据进行预处理。例如,可以从几个来源加载包含RSS新闻的XML 文件,然后在服务器上将这些XML文件聚合到一个源文件中,当请求发生时再将这个新文件发 布给客户。
         如果想不通过服务器的参与加载远程地址中的数据,那我们就必须聪明一些。例如,加载外 来JavaScript文件的一种流行方法是根据请求注

〈<script>标签。由于jQuery能帮我们插人新的 DOM兀素,因此向文档中注人<script>标签非常简单:
$(document.createElement('script'))
.attr('src', 'http://example.com/example.js')
.appendTo('head');

实际上,$.getScript()方法在检测到其URL参数中包含远程主机时,就会自动采用这种 技术;也就是说,该方法已经替我们想到了这一点。
此时,浏览器会执行加载的脚本,但却没有任何机制能够从脚本中取得结果。为此,使用这 种技术要求同远程主机进行协作。加载的脚本必须执行某些操作,例如设置一个对本地环境有影 响的全局变量。而远程主机上的服务除了发布能够通过这种方式执行的脚本外,还会提供一个 API以便同远程脚本进行交互®。
另一种方法是使用<iframe>这个HTML标签来加载远程数据。可以S<iframe>兀素指定任 何URL作为其获取数据的来源,包括与提供页面的服务器不匹配的URL。因此,第三方服务器上 的数据能够轻易地加载到<iframe>*,并在当前页面上显示出来。然而,要操作<1^&^16>中的 数据,仍然存在同使用<script>标签时一样的协作需求;位于<iframe>*的脚本需要明确地向 父文档中的对象提供数据。
①由于在动态注入的<script>标签中,脚本可以来源于任何一个域(src属性可以指向任何第三方站点),也就意 味着可以通过该脚本中的XMLHttpRequest对象取得任何其他域中的信息,因而就绕过了“同源策略”的安全限 制。Google Map的Google Maps API
6.8安全限制
跨域共享资源
        最近,W3C又制定了 一项技术草案,叫做Cross-Origin Resource Sharing (CORS,跨域资源共享)。这项技术要求一个域向另一个域发送的请求中要包含 另一个域期待的自定义HTTP头部。接收请求的域如果接受请求,必须返回 Access-Control-Allow-Oreigin响应头部。要了解CORS的更多信息,请访 问 http://www.w3.org/TR/cors/


原文地址:http://www.itmmd.com/201501/511.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

jQuery教程(26)-ajax操作之使用JSONP加载远程数据   上一篇
下一篇  如何开启tomcat(jvm)的gc日志

精彩回复
发表评论
姓名:       

《程序员app》专门为程序员量身定做!