精通ASP.NET 3.5网络编程之安全策略
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.1 Web安全基础

当人们谈论Web应用程序安全问题时,通常可能会立刻想到Web站点遭到篡改或服务器攻击等破换、网络用户窃取信用卡号码、站点遭到拒绝服务攻击。也有些人可能想到病毒、木马和蠕虫。这些是受网络用户最为关注的问题类型,因为它们代表了目前Web应用程序面临的一些最重要的威胁。然而,这些仅仅是面临的一部分安全问题,却经常忽略其他的重要问题。如恶意管理员、不满意的雇员和偶然发现敏感数据的临时用户所制造的内部威胁都会造成重大风险。

2.1.1 理解Web安全

安全究竟是什么?从本质上说,安全与保护对象有关。对于Web应用程序,保护对象可能是实体的内容,例如Web页或客户数据库;也可以不是实体的,而是无形的财产,例如一个公司的名声。读者要认识到安全是一种途径,一种手段,而不是最终目的。当对基础结构和应用程序架构进行分析时,能够发现其潜在的威胁并理解每个威胁代表的风险程度。所以,安全是与风险管理和实施有效的对策相关的。

Web应用安全的解决方案不仅仅是纯粹的技术问题。它是一个涉及人为因素和实践的不断发展的过程。有很多网络用户抱有这样一种态度——我们是有安全的,因为有防火墙。这种观点是错误的,在一定程度上防火墙能起到保驾护航的作用,如端口封闭、检查通信和提供一些高级的保护措施。虽然防火墙是安全的一个必备部分,但它们本身并不是一个完整的解决方案,对于有些安全威胁时无能为力,如防火墙可能没有检测到发送到Web应用程序的恶意输入。此外,防火墙也不能处理人为因素带来的安全隐患,如恶意管理员对于应用程序进行直接访问的情况。

安全套接字层(SSL)跟防火墙情况类似。它对网络中的通信数据进行加密是很有用的。然而,它并不验证应用程序的输入或当使用配置很差的服务器时并不能保证其数据的安全性。

2.1.2 Web安全策略基础

任何一个成功的应用程序安全策略的基础都是由一些稳定的元素构成,如身份验证、授权和审核,下面是常见的Web安全策略基础元素。

1. 身份验证

身份验证提出这样的问题:您是谁?也就是用户在应用程序中扮演什么样的角色,而这是识别出应用程序和服务的客户端的一个过程。而这个客户端是一个广义的客户端,它可能是最终用户、也可能是其他服务、进程或计算机。而经过身份认证的客户端,在安全说法中被称为主体。

在大型的Web分布式应用程序中,身份验证一般会跨多个层发生,如终端用户通过Web应用程序的登录页面,一般是通过输入用户名和密码来进行系统用户的身份验证。用户成功登录系统后,当涉及到数据库访问时就会涉及到数据库服务器访问的身份验证。关于身份验证的相关技术将在后面的章节中详细介绍。

2. 授权

授权提出这样的问题:您能做什么?也就是用户在应用程序中所扮演的角色都有哪些能力。这是对经过身份认证的客户端允许访问的资源及执行的操作进行管理的过程。这些资源包括文件、数据库、功能模块等,以及系统级的资源,如注册表项和配置数据。操作包括对事务的执行,例如查看必要的数据,对数据的修改能力等。

在我们所见的大多数Web应用程序,主要是通过系统角色来给用户分配权限,如系统管理员角色,那么它就具有相应的系统管理功能,如Web应用程序配置与管理,用户的维护等功能。关于授权的相关技术将在后面的章节详细介绍。

3. 审核

有效的审核和日志记录功能在Web应用程序中是不能否认的关键。不能否认就是为保证一个用户不能否认执行了一项操作或开始了一个事务。例如,在一个电子商务系统中,需要使用不能否认机制来确保顾客不能否认订购了某种电子产品。关于审核的相关技术将在后面的章节详细介绍。

2.1.3 安全通信

多层应用程序在各层之间传递敏感性数据是一个不可避免的过程,这些机密数据要么从客户端传递到数据库,或者相反。这些机密数据可能是我们常用的银行卡账号和密码,或信用卡账号和密码,这些数据如果在传输的过程被不怀好意的人窃取了,后果可想而知。如何保障我们的机密数据,关键就是构建Web程序的安全通信。以下是安全通信提供的几个特性。

(1) 机密性

机密性,也称保密性,就是确保数据保持专用和机密,那些未授权用户或想通过网络监控通信流量的窃听者无法查看该数据。而加密技术通常被用于加强机密性。访问控制列表(ACL)也是加强机密性的一种方法。

(2) 完整性

完整性保证数据不出现意外或蓄意(恶意)篡改的情况。和数据保密性一样,完整性也是一个主要关注点,特别是那些经过网络传送的数据。在传输中,数据的完整性通常是通过使用哈希技术和消息验证技术提供。

对于企业来说,数据的安全性是至关重要的,因此加强应用程序的安全通信技术是企业Web应用中不可避免的问题。