Web 2.0 应用安全深入解析:企业级 Web 2.0 应用安全解决方案

来源:百度文库 编辑:神马文学网 时间:2024/04/28 14:40:27

文档选项

打印本页

将此页作为电子邮件发送

赵静, 技术顾问, IBM
2009 年 8 月 27 日
什么是 Web2.0 ?它包含了哪些技术?这些技术的产生又对网络应用安全带来了哪些隐患和风险?本文从这些问题着手,重点探讨 Web2.0 时代的技术特征和应用安全,并通过结合 Rational 安全解决方案,为大家提供面对新时代、新问题的应用安全应对思路。
什么是 Web2.0 ?它包含了哪些技术?这些技术的产生又对网络应用安全带来了哪些隐患和风险?本文从这些问题着手,重点探讨 Web2.0 时代的技术特征和应用安全,并通过结合 Rational 安全解决方案,为大家提供面对新时代、新问题的应用安全应对思路。
互联网技术在不断发展,从传统的、以获取信息为主的 Web 应用(如各大企业门户网站),到目前被广大网民喜爱的 Blog、Wiki 等,一种变革正在悄然形成。这种变革,不但改变了我们对 Web 应用的体验,也正在渐渐改变我们的生活方式。这就是 Web2.0。
在 Web 应用早期,我们是从浩瀚的互联网数据中,自己去寻找感兴趣的、由网站开发者提供的静态信息;而在 Web2.0 时代,我们自己就是信息的构建者,通过人与人的互动而产生出创造性的内容,这些内容再被更多的人管理和使用。那么,究竟什么是 Web2.0 呢?业界对此并没有一个标准定义。我们可以通过以下认同最高的描述,体会 Web2.0 的真谛。
“Web 2.0 并不是一个技术标准,不过它包含了技术架构及应用软件。它的特点是鼓励作为信息最终利用者通过分享,使得可供分享的资源变得更丰盛;相反的,过去的各种网上分享方式则显得支离破碎。”(引自维基百科)
“将纷繁芜杂的 Web2.0 现象放置于科技发展与社会变革的大视野,Web 2.0 可以说是信息通讯技术引发信息革命、知识社会所带来的面向未来、以人为本的创新 2.0 模式在互联网领域的典型体现,是由专业人员织网到所有用户参与织网的创新民主化进程的生动注释。”(引自维基百科)
从上面的描述可以看出,Web2.0 是一种新现象、新概念、新思维方式,而并不是新的技术标准。不同的角色,感受的是 Web2.0 的不同气息:对于研究网络技术的人员而言,Web2.0 像是一组名词、一些新社会软件的合成体,比如说 Social Networking、Blog、Wiki、Ajax、Mashup 等;对于经常在互联网上交流和分享的网民来说,Web2.0 则提供了更为自由、便捷的信息互动手段,他们借助 Blog、Wiki 等,和有着共同爱好的人们交换思想、分享内容;而对于商人们而言,Web2.0 则是新业务模式、新行业游戏规则的转变。新模式下,以往在门户网站上购买广告条,期待茫茫人海中出现感兴趣的鱼儿的被动现象,可以转变为针对有着不同兴趣爱好的社会网络群体,投放不同分类广告的主动局面,甚至可以主动收集人们的网络使用习惯、偏好等,推出完全不同的个性化服务。这些转变,也相应引出了“Blog 营销”、“长尾现象”等新经济模式。
对于更为深入的理解 Web2.0,Tim O'Reilly 的七条原则会更有帮助些。
1、将 Web 作为平台
2、驾驭群体智慧
3、数据将变成未来的“Intel Inside”
4、软件不断发行与升级的循环将会终结
5、轻量型程序设计模型
6、软件运行将跨越单一设备
7、丰富的用户体验
详细描述,请参考网址:http://tim.oreilly.com/news/2005/09/30/what-is-Web-20.html。结合这七条原则,我们可以更清楚的理解图 1 所示的 Web1.0 和 Web2.0 主要特性比较。 其中,Web2.0 “复杂 & 异步”的特点,我们会在后面的技术章节中涉及到。

下面我们举一些 Web2.0 的例子:
社会网络(Social Networking):也叫做虚拟社区,是一群有着共同兴趣的人组成的大众网络。这些兴趣可以是任何类型,比如说健康状况类似、拥有同一款汽车、都购买了 IBM 产品,等等。如 Facebook(www.facebook.com),就是一个著名的社会网络服务网站。 Wiki:一种网站,允许用户方便的添加、删除或者编辑网站上的内容,有时甚至无需注册。这种便捷的交互操作使其立刻成为共享群体智慧的有效工具。业界有很多著名的 Wiki 网站,如维基百科 (www.wikipedia.org),IBM 在内部也开放了 WikiCentral。本文有部分信息来自于这两个站点。 Mushup:中文是混搭的意思,也有翻译为聚集。指整合网络上多个资料来源或功能,以创造新服务的网络应用程序。“混搭”一词源自于流行音乐将两种不同风格的音乐混合,以产生新趣味的作法。Google 开放了其 Google Maps 的 API,因此诞生了很多以此为 Mushup 的应用,如 Twittervision(beta.twittervision.com),就是将 Google Map 和 Twitter 功能混搭,制造出在全球地图上,不同区域的人们互发消息的有趣应用。




回页首
Web2.0 中涉及了很多名词和术语,比如 Tags、Blogs、Ajax、Flex、MalWare、Wiki、RSS、Social Networking、Podcast、Mushup 等等。由于篇幅所限,我们仅在本章节分析 Ajax、Flex,同时,还将涉及越来越受到关注的 MalWare。
Ajax 全称为“Asynchronous JavaScript and XML”(异步 JavaScript 和 XML),是一种创建交互式网页应用的网页开发技术。如图 2 所示,在 Web1.0 时代中,客户端浏览器和服务器之间的通讯是同步的,也就是说,当我们在 Web 页面上填写表单(例如使用搜索功能),请求就会发送到服务器上,经过处理后,服务器将完整的结果页面再次发送回来。可以看出,发送请求的前后两个页面,很多内容是完全重复的。这种做法的反复执行,极大的浪费了网络带宽,也浪费了使用者很多等待多余信息的宝贵时间。

Ajax 应用则可以和服务器通讯更改过的内容。它借助于客户端的 JavaScript 处理来自服务器的响应。同时,还有很多任务是由客户端本身来完成。因此,在网络上的数据交换更少、Web 服务器的处理时间更短。用户感觉到的是更快的请求响应速度。如图 3 所示。注意,图中的数据刷新替代了传统 Web 应用的页面刷新。

由于 Ajax 良好的用户体验,被认为是 Web2.0 的典型技术特征,已经在很多成熟应用中被广泛采纳,如大家熟悉的 Google 地图、Google 搜索建议、Gmail 等。要了解更多 Ajax 信息,请访问 http://www.openajax.org/index.php
2.2.1 Ajax 动态特征
Ajax 是构建在 DHTML(动态 HTML)技术之上的,这包括:
JavaScript:在 Web 应用客户端广泛使用的脚本语言;
DOM:Document Object Model,文档对象模型,用来代表 HTML 或 XML 文档的标准对象模型,当前浏览器都支持 DOM 并且允许 JavaScript 代码使用 DOM 来动态修改 HTML 内容;
CSS:Cascading Style Sheets,级联样式表,是一种用来描述 HTML 文档展现的样式表语言,JavaScript 可以在访问 Web 页面时动态修改 CSS。
通过这些动态技术,在 Ajax 应用中,客户端 JavaScript 通过动态修改 DOM 树结构和 CSS,实现了动态的更新 Web 页面。
2.2.2 Ajax 异步通讯特征
前面提到,Ajax 可以和服务器交换更改过的、而非整个页面的内容。这种异步通讯,是通过如下技术实现的:
JSON:JavaScript Object Notation,是一种基于文本(类似于 XML)、轻量级的数据交换格式。在 Web 应用中,可以使用 JSON 传输字符串、数字、二进制,或是数组、对象等等。由于它格式简单、容易理解、容易解析,是目前在 Ajax 应用中最为灵活的数据交换解决方案。
XMLHttpRequest 对象:是 XMLHTTP API 函数集的一个对象。该函数集在 Web 浏览器和服务器之间收发 XML 或其它数据。一个由 XMLHttpRequest 对象发送的 HTTP 请求并不要求页面中拥有或返回一个< form >元素,这意味着该对象的 send() 方法可以立即返回,从而让 Web 页面上的其它 HTML/JavaScript 元素继续由浏览器处理,而由服务器处理该 HTTP 请求并发送响应。通过这样的机制,实现动态更新页面部分元素,而无需传递整个页面的效果。它是当今 Ajax 和 Web2.0 应用的技术基础。
2.2.3 Ajax 非同源调用特征
在介绍 Ajax 调用之前,我们先来看看浏览器的“同源安全模型”。同源模型是客户端脚本运行的重要安全度量标准,它指的是来自于同一个“源”的脚本可以互相访问其方法和属性,而拒绝非同“源”的访问。该模型的精髓是:它认为从任何站点装载的内容是不安全的,当被浏览器不太信任的脚本运行时,它们应该只被允许访问来自同一站点的资源,而不是那些来自其它站点可能怀有恶意的资源。这里“源”包含了 Domain、Protocol 和 Port。如表 1 所示,当采用同源策略时,来自于 http://www.example.com/dir/page.html 页面的脚本 A,可以访问和使用来自 http://www.example.com/dir2/other.html 页面的脚本 B,因为两者在 Domain(www.example.com)、Protocol(http 协议)和 Port(默认为 80)上是一样的,被认为是同源;而脚本 A 不能访问 http://www.example.com:81/dir2/other.html 页面的脚本 C,因为他们不是同一个 Port,被认为非同源。
为什么要有同源的限制呢?这是浏览器提供的最为基础的安全保障之一。如果放开同源限制,黑客就可以通过引诱用户访问嵌入在自己恶意站点上的正常应用(如用 Iframe 将银行登录页面嵌入到黑客的恶意应用中),当用户访问该应用时,攻击脚本就可以在不同源之间互访,窃取用户登录信息,或者跟踪用户的各种操作。
用来比较的URL 结果 原因
http://www.example.com/dir/page.html 成功 相同的协议和主机
http://www.example.com/dir2/other.html 成功 相同的协议和主机
http://www.example.com:81/dir2/other.html 失败 相同的协议和主机,端口不同
https://www.example.com/dir2/other.html 失败 不同的协议
http://en.example.com/dir2/other.html 失败 不同的主机
http://example.com/dir2/other.html 失败 不同的主机(需要精确匹配的场景)
http://v2.www.example.com/dir2/other.html 失败 不同的主机(需要精确匹配的场景)
再回到 Ajax 调用问题上。Ajax 可以通过如下方法被调用:
XMLHttpRequest 对象:该对象受限于同源安全模型;