打造安全 Ajax mashup 的未来

来源:百度文库 编辑:神马文学网 时间:2024/04/29 00:14:39
mashup 是一个 Web 应用程序,它集成了来自多个源的内容并将其交付到一个页面中进行显示。服务器向每个内容源发出请求,解析收到的信息,并将结果综合到一个页面中发给浏览器,如图 1 所示。

Asynchronous JavaScript + XML(Ajax)应用程序 使 Web 页面能从服务器获取内容并使用 JavaScript™ 代码异步地在适当位置进行自我更新,如图 2 所示。这样,用户就可以与富用户界面 (UI) 进行交互而无需重新加载整个页面。服务器向浏览器发送初始页面,后者回调服务器以获取更新后的内容。异步的 JavaScript 代码调用频繁使用 XML 来编码数据;但是,其他的数据格式则更通用,如 JavaScript Object Notation (JSON)、HTML 和分隔文本。

Ajax mashup 是一种混合的 Web 应用程序。它使用 Ajax 技术来显示富 UI,此类富 UI 使用从多个源异步检索到的内容在适当位置进行自我更新。服务器向浏览器发送初始页面,后者发出调用以检索更新后的内容。这些调用可从浏览器直接发往第三方源或者发回初始服务器,初始服务器用作第三方内容的代理。




回页首
当设计包含当前浏览器环境的元素时,没有人注意到 Ajax mashup。浏览器、超文本传输协议(HTTP)或 HTML 或专门设计用于容纳浏览器的(以一种安全而健壮的方式)异步检索多个源中内容的功能的 XHTML 都没有内置任何组件。World Wide Web Consortium (W3C) HTTP 规范中的一些可能用于 mashup 的一些特性(如 Document Object Model (DOM) Level 3 Load 和 Save Specification)并未由大多数浏览器完全实现,或是根本没有实现。
Dynamic HTML (DHTML) 开始时不与动态检索到的内容结合使用。动态 Web 页面的显示和数据元素都与操作它们的脚本一起交付。这些脚本将显示、隐藏、移动、创建和销毁文档对象以便实现动态效果,但是一旦需要从服务器获取更多数据,原页面就被新页面取代。数据流与页面重新加载同步。
因此,希望构建混合 Web 应用程序(现在称为 mashup)的开发人员必须利用可用的技术设法对其进行扩展以满足他们的需求。有两种方法可使浏览器在无需重新加载页面的情况下检索内容:嵌入外部传输机制和使用浏览器本地对象执行传输任务。
早期的解决方案是 Microsoft 的 Remote Scripting,它使用一个 Java™ applet 与服务器端组件交换 XML 格式的消息。此方法很快就因为供应商的争论以及 Java Virtual Machine (JVM) 和安全模型的差异而变得不实用。
Microsoft 稍后构建了 XMLHttpRequest (XHR) 对象,其设计者的预想是只能通过 Microsoft® Outlook® Web Access (OWA) 来使用该对象。该对象最初只能由 Windows® Internet Explorer® 用户使用,直到多年后 Mozilla 和 Safari 采用它时,才得到广泛使用。它最初是一个外部的 Microsoft ActiveX® 对象,而当前的实现则是浏览器内的本地对象。虽然其名称为 XHR,但是 XHR 对象却可以传输任意格式的数据而非仅限于有效的 XML 格式数据。
很多开发人员使用 Macromedia Flash 的 XML 通信特性来构建可嵌入的组件与服务器进行通信。XMLSocket 和 flex.net.socket 对象提供了类似 XHR 的功能,但附带了额外的通信控制和 XML 解析功能。
由于外部传输机制相关的问题和依赖性,互联网开发团体协作发现并开发了几个浏览器本地的远程调用方法。
使用一个隐藏的 iframe 元素来加载外部内容:然后通过 DOM 访问 iframe,提取加载文档中的内容。您可指定 URL querystring 中的任何参数或动态创建一个表单,此表单以 iframe 为目标提交到服务。此方法与很大范围内的当前的和旧式浏览器兼容。 使用 img 元素发送内容请求:服务器使用 URL 的 querystring 中的参数执行其任务,然后在 cookie 中返回编码后的内容。此方法仅限于可轻松通信数量的数据使用,因为 querystring 和 cookie 都有大小限制。 在当前页面的 DOM 中动态创建脚本元素:加载后,立即执行服务器所提供的代码。服务器使用 URL querystring 中的参数。
请参阅参考资料 中关于这些工具和技术的详细信息的链接。




回页首
大多数可用于异步检索内容的技术都继承了 JavaScript 安全模型的安全性,它使脚本只与源于该脚本所属页面所在的同一服务器的元素进行交互。这就是所有浏览器都实现了的同源策略(Same Origin Policy)。
要让 Web 页面从第三方检索内容,必须避开同源策略。常用的不受同源策略限制的例外是