Web 聚合运用跨域通信机制 1 引言 在传统的 Web1.0 应用程序中,每个 Web 站点相互隔离,用户访问 Web 站点仅能得到来自本站点的信息。即使需要访问其他站点,也是通过编辑拷贝已存储在本地的信息或者用户调换网站地址的方式来访问内容,而不是直接访问信息源数据。在新的Web2.0 潮流之下,希望网站之间打破隔离进行数据融合,使之能够共享信息。在这种背景下,聚合型网站设计方式应运而生,这就是新型的Web应用程序——聚合应用(mashupapplication)。Mashup 这个名词来源于流行音乐,将不同风格的音乐拼接,混杂在一起,构成自己独特的新曲子;Mashup 在 Web 环境中代表着整合不同来源的内容以提供交互式体验的 Web 站点或应用程序[1]。利用其他网站开放应用接口所提供的内容进行混搭,从而制造出独特的、具有新价值的 Web 应用。Mashup 把不同源或站点的信息进行融合以保证信息共享,打破站点之间“孤岛林立”的现状,由此浏览 Web 站点更加直观便捷,用户体验更加富。典型的 Mashup 应用当属 Housingmap,它将第三方网站 Craigslist 的租房信息和 GoogleMaps 提供的地图信息有机地组织起来,让租房的信息直观显示在地图上,制造出一个崭新的、互动性强的房屋搜寻站点[2]。根据以上实例背景,本文建立一个 Housingmap 聚合应用模型,由电子地图与租房信息 2 部分组成,如 图 1 所 示 。 传 统 的 Web 浏 览 器 安 全 机 制 遵 守 同 源 策 略(SOP,same-originpolicy)。同源策略规定 JavaScript(JS)代码只能访问其来自同源服务器上的数据,把来自不同源的内容相互分离。这种策略给 JS 提供安全保障的同时限制了基于 JS 的跨域访问。Mashup 是对多个站点资源的优化组合,需要从多个分散的站点猎取信息源,而不要求各个站点之间相互信任。传统同源策略过渡的安全设计没有考虑多个站点之间交互时整体的快速通信需求,也没考虑新的信任模型下的安全问题。如图 1 所示,电子地图与租房信息的数据分别来自 www.map-和 www.housing-2 个不同源的网站,在现有的同源策略下是不能够相互访问和通信。怎样整合相互独立的第三方数据、实现不同源数据之间的通信是聚合应用需要解决的问题。另外,恶意攻击者可能重写来自其他源的网页属性,例如来自 www.map-的脚本可能重写 www.housing-网页的 location 属性,操纵原页面跳转到某个恶意的页面,而导致框架钓鱼攻击。如何保证不同源数据...