1.1 Web应用程序的发展历程
在因特网发展的早期阶段,万维网(World WideWeb)仅由Web站点构成,这些站点基本上是包含静态文档的信息库。随后人们发明了Web浏览器,通过它来检索和显示那些文档,如图1-1所示。这种相关信息流仅由服务器向浏览器单向传送。多数站点并不验证用户的合法性,因为根本没有必要这样做;所有用户同等对待,提供同样的信息。创建一个Web站点所带来的安全威胁主要与Web服务器软件的(诸多)漏洞有关。攻击者入侵Web站点并不能获取任何敏感信息,因为服务器上保存的信息可以公开查看。所以攻击者往往会修改服务器上的文件,以歪曲Web站点的内容,或者利用服务器的存储容量和带宽传播“非法软件”。
图1-1 包含静态信息的传统Web站点
如今的万维网与早期的万维网已经完全不同,Web上的大多数站点实际上是应用程序(见图1-2)。它们功能强大,在服务器和浏览器之间进行双向信息传送。它们支持注册与登录、金融交易、搜索以及用户创作的内容。用户获取的内容以动态形式生成,并且往往能够满足每个用户的特殊需求。它们处理的许多信息属于私密和高度敏感的信息。因此,安全问题至关重要:如果人们认为Web应用程序会将他们的信息泄露给未授权的访问者,他们就会拒绝使用这个Web应用程序。
图1-2 典型的Web应用程序
Web应用程序带来了新的重大安全威胁。应用程序各不相同,所包含的漏洞也各不相同。许多应用程序是由开发人员独立开发的,还有许多应用程序的开发人员对他们所编写的代码可能引起的安全问题只是略知一二。为了实现核心功能,Web应用程序通常需要与内部计算机系统建立连接。这些系统中保存着高度敏感的数据,并能够执行强大的业务功能。15年前,如果需要转账必须去银行,让银行职员帮助你完成交易。而今天,你可以访问银行的Web应用程序,自己完成转账交易。进入Web应用程序的攻击者能够窃取个人信息,进行金融欺诈或执行针对其他用户的恶意行为。
1.1.1 Web应用程序的常见功能
创建Web应用程序的目的是执行可以在线完成的任何有用功能。近些年出现的一些Web应用程序的主要功能有:
❑ 购物(Amazon);
❑ 社交网络(Facebook);
❑ 银行服务(Citibank);
❑ Web搜索(Google);
❑ 拍卖(eBay);
❑ 博彩与投机(Betfair);
❑ 博客(Blogger);
❑ Web邮件(Gmail);
❑ 交互信息(Wikipedia)。
如今,使用计算机浏览器访问的应用程序的功能越来越多地与使用智能手机或平板电脑访问的移动应用程序的功能重叠。大多数移动应用程序都通过浏览器或定制客户端与服务器进行通信,这些浏览器或客户端大多使用基于HTTP的API。应用程序功能和数据通常在应用程序用于不同用户平台的各种接口之间共享。
除公共因特网外,组织内部已广泛采用Web应用程序来支持关键业务功能。许多这类应用程序可以访问各种高度敏感的数据和功能。
❑ 用户可以使用HR应用程序访问工资信息、提供并接收绩效反馈,以及管理人员招聘和纪律处分程序。
❑ 连接关键体系架构(如Web和邮件服务器)的管理接口、用户工作站及虚拟机管理。
❑ 用于共享文档、管理工作流程和项目、跟踪问题的协作软件。这些功能通常涉及重要的安全和监管问题,而且组织结构大多完全依赖于它们的Web应用程序内置的控件来实现这些功能。
❑ 企业资源规划(ERP)软件等业务应用程序,这类应用程序以前使用专用厚客户端应用程序访问,现在则可以通过Web浏览器进行访问。
❑ 电子邮件之类的软件服务,这类服务最初需要独立的电子邮件客户端,现在可以通过Web接口(如Outlook Web Access)访问。
❑ 传统的桌面办公应用程序(如文字处理程序和电子表格)已通过Google Apps和Microsoft Office Live等服务转换为Web应用程序。
为降低成本,组织逐渐将各种任务外包给外部服务提供商来完成,因此,在上述所有示例中,我们所认为的“内部”应用程序正日益由外部机构托管。在这些所谓的“云”解决方案中,业务关键功能和数据向数目更庞大的潜在攻击者开放,而组织却越来越多地依赖于不受其控制的安全防御。
大多数计算机用户所需要的客户端软件仅仅是一个Web应用程序,这样的时代即将来临。到那时,用户使用一组共享的协议和技术即可执行各种功能,但随之也会出现各种常见的安全漏洞。
1.1.2 Web应用程序的优点
Web应用程序越来越流行的原因显而易见。若干技术因素已经与主要的商业动机相结合,从而引发了因特网使用方式上的重大变革。
❑ HTTP是用于访问万维网的核心通信协议,它是轻量级的,无须连接。这一点提供了对通信错误的容错性。应用HTTP,许多传统客户端—服务器应用程序中的服务器无须再向每一个用户开放网络连接。HTTP还可通过代理和其他协议传输,允许在任何网络配置下进行安全通信。
❑ 每个Web用户都在其计算机和其他移动设备上安装了浏览器。Web应用程序为浏览器动态部署用户界面,不必像以前的Web应用程序那样需要分配并管理独立的客户端软件。界面变化只需在服务器上执行一次,就可立即生效。
❑ 如今的浏览器功能非常强大,可构建内容丰富并且令人满意的用户界面。Web界面使用标准导航和输入控件,可保证用户即时熟悉这些功能,而不需要学习如何使用各种应用程序。应用程序可通过客户端脚本功能将部分处理交由客户端完成,必要时,可使用厚客户端组件任意扩展浏览器的功能。
❑ 用于开发Web应用程序的核心技术和语言相对简单。即使是初学者,也可使用现有的各种平台和开发工具,开发出强大的应用程序,还有大量开源代码和其他资源可供整合到定制的应用程序中。