如何设计安全的Ajax Mashup
mashup作为一个建立web应用的新方式,它在单一页面中合并了来自多个源站点的程序和数据服务。通称,通过将javascript作为各个源页面之间的“粘合剂”使这些组件和连接被乖巧地布局在同一个页面里,这样并无需昂贵的花费就生产出有价值的“新产品”。但同时我们发现mashup在互联网上的“裸奔”...
一、谁叫mashup?
由多个源站点无缝合并而成的一个web站点或web应用被称为“mashup”。它带给用户集成体验:分散在各地的页面被以一种新奇的重用模式合并、表达出来。
典型mashup的内容通过公共接口或是API取自第三方来获得。而另一种方式就是通过包含web feeds(比如RSS、Atom)和Javascript(比如google AdSense)来获得内容。
大家会在以下的地方对mashup有所体验:eBay、Amazon、Google、Windows Live和Yahoo开发网络。
二、“物美价廉”的乐高平台
mashup作为一个建立web应用的新方式,它在单一页面中合并了来自多个源站点的程序和数据服务。通称,通过将javascript作为各个源页面之间的“粘合剂”使这些组件和连接被乖巧地布局在同一个页面里,这样并无需昂贵的花费就生产出有价值的“新产品”。
mashup就如一套乐高玩具(比如乐高星战系列),把现存的有趣东西粘合在一起。
三、互联网上的“裸奔”
这里的裸奔并非在光天化日之下的赤裸行为,而是将自己一丝不挂的充分暴露在互联网中,等待着种种无情的“欺辱”。
下面来看一下可能导致mashup裸奔的原因:
1.束手无措的javascript:在组件包含私有信息或者带有私有连接时mashup就无法工作了(至少整个页面已经被forbidden提示搞得丑陋不堪)。javascript提供了一些穿过这些“封锁”的暗门,但它所依赖的单独的全局对象却由于包含页面和被包含页面之间的互不信任而被禁止。
2.无衣遮身的DOM:mashup中的DOM对安全来讲真是很糟糕,因为每个DOM节点都直接或者间接地链接到另一个节点,这导致不能在有效地隐藏DOM的同时充分地调用其全部功能。
3.相对过激的iframe:<iframe>结构隔离了组件是它们之间不能相互攻击,这中隔离策略对安全很好,但这支双刃剑也刺破了组件之间的“协作”。而mashup是需要组件协作的。
4.能力有限的ajax:采用XMLHttpRequest调用有限的服务——无法访问到被包含页的未开放服务。如果没有通过服务器的代理就无法mash up。
另外,一些富媒体(rich media)广告是mashup的。这些ad脚本需要访问页面的所有信息,包括cookie和到服务器的授权连接。而当前的浏览器设计并没有关照这个集成层次,安全模式仍然遵守着保护本站安全的原则。
所以mashup需要一个更加细粒度的解决方案。
- 本文关键词:

