作为Web服务器,就是向浏览者友好的提供反馈信息。如果访问者按照网络服务的规则,以合理身份和合理的权限提交数据访问请求,那么交互关系就会显得顺理成章。但是事实上并非这么简单,正如世界上的交通一样,并非所有的车辆都是按照规定行道来行驶,总会有些有意无意的访问是不合规则(不合法)的。因此网络应用程序安全问题显得尤为重要。
我们知道Web应用程序提供的服务是可以通过世界上任意一台可以连到互联网的计算机来访问。而在链接路径上的任意位置都可能存在数据拦截,但是我们却是很难确定用户的位置。这些不合规则的访问会不同程度地给服务器造成影响,轻者造成服务器响应出错,重者泄漏其他机密信息或是造成服务器瘫痪。而我们最害怕的是后者,试想:记录客户信用卡帐号的信息被盗窃,在线证券的服务器被攻击瘫痪等等,这是多么可怕的事情呀。而这些危害安全的非法访问都是利用漏洞的,无论是网络的漏洞,还是Web应用程序的漏洞,如果不进行严密的安全控制,带来的损失往往是难以估量的,但是我们可以从安全控制上来最大可能的减少这种事情的发生。Web应用程序的安全和网络安全是两码事,但都是至关重要的。这里我们主要介绍关于ASP.NET中Web应用程序的安全控制。
任何成功的应用程序安全策略的基础都是稳固的身份验证和授权手段,以及提供机密数据的保密性和完整性的安全通讯。在维护Web应用程序的安全控制中,我们普遍使用的是身份验证技术。身份验证(authentication)是一个标识应用程序客户端的过程,这里的客户端可能包括终端用户、服务、进程或计算机,通过了身份验证的客户端被称为主体(principal)。身份验证可以跨越应用程序的多个层发生。终端用户起初由Web应用程序进行身份验证,通常根据用户名和密码进行;随后终端用户的请求由中间层应用程序服务器和数据库服务器进行处理,这过程中也将进行身份验证以便验证并处理这些请求。
ASP.NET 与 IIS、.NET 框架和操作系统所提供的基础安全服务配合使用,共同提供一系列身份验证和授权机制,如图12.1演示了这些组件之间如何相互配合,共同完成安全控制作用的。
图 12.1 ASP.NET安全服务体系
做为Web程序员来讲,我们更关心的是身份验证和授权的安全控制阶段。ASP.NET的身份验证提供程序包括窗体(Forms)份验证(也称为表单验证)、Windows身份验证、护照(Passport)身份验证和无验证(None),共4种。当通过身份验证后,ASP.NET会检查是否启用身份模拟。如果启用,ASP .NET 应用程序使用客户端标识以客户端的身份有选择地执行。否则,ASP.NET应用程序使用本机身份标识运行(一般使用本机的ASPNET帐号),具体流程如下图所示:
图 12.1 身份验证流程
本章中,我们将详细介绍平时常用的并且用以实现的窗体身份验证和Windows验证。在学习这两种验证之前,我们有必要先了解一下Web.config文件。