RIA 的安全挑战

无论是 HTML 桌面应用程序还是 HTML Web 应用程序,它们所面临的一个主要威胁是会导致恶意代码执行的注入攻击,如跨站点脚本攻击 (XSS)。代码通常会通过一些常见矢量来注入,例如:URL 处理( javascript: 和其它危险方案), eval() 和为 DOM 元素(如 innerHTML outerHTML )分配外部 HTML 内容。如果加载操作通过 HTTP 执行,恶意代码还可能注入到可信赖的服务(如 Google 地图)中。

如果开发人员认为应用程序使用的内容无害,而事实上这些内容却包含恶意代码,那么这些漏洞就会暴露出来。 例如,某个基于 HTML 的 AIR 应用程序从在线博客提取注释并将其显示出来,它可能会允许用户编写如下注释:

<a href="#" onclick="var f=new air.File('c:\\something.txt'); f.deleteFile();">I'm cool!</a>

如果用户单击此链接,文件可能会被删除。损坏可能远不止于此,安全漏洞在基于浏览器的 HTML 和 Ajax 应用程序中是很常见的。

一种假设认为,通过 JavaScript 对象表示法 (JSON) 加载的恶意内容所带来的损坏可以受到现有域沙箱限制的限制,这种假设是不正确的。细粒度 DOM 沙箱边界(如 frame iframe )中的所有数据都在此沙箱中运行,无论其来源如何。即使是粒度最小的帧定义的 DOM 沙箱边界,也只能在内容被置于不同的原始域时成功运行。此外,常见的设计和实现模式会促进使用这些危险的做法。

对于传统的 Ajax 应用程序,由于浏览器中运行的应用程序经过沙箱处理,因此是可接受的。 浏览器应用程序与用户的计算机隔离且受同源策略的约束,具有独特的对称性。

有权访问功能丰富的 API 的丰富 Internet 应用程序提出了独特的挑战。即使一个简单的应用程序,如果编码欠佳,也可能包含将导致严重损坏用户计算机的注入弱点。对于任何 RIA 平台,恶意攻击可能造成的损坏与其运行时提供的值成正比。RIA 平台中 API 的功能越强大、越丰富,风险就越大。