(8)启用SSL。如果在应用程序中处理敏感的数据,应该始终启用并使用SSL。这有两个好处:首先,SSL可以鉴别服务器的身份,并在用户输入任何敏感数据(例如密码)前,保证会话对象是正确的服务器。其次,在服务器身份验证后,所有传输的数据都被加密并进行完整性保护。
(9)设置适当的验证方式。管理人员要要非常清楚身份验证方式的设置。在IIS的诊断工具箱中,可以找到一个工具AuthDiag,它能检查身份验证的方式、ACL和进程权限。
强化ASP.NET配置
在实现以上所述的安全性方面的内容之后,接着要通过一些配置来提高ASP.NET方面的安全性。在这个方面,管理人员要注意锁死ASP.NET的配置,与安全相关的配置项和预编译等方面的相关内容。
(1)锁死配置。ASP.NET的特点使用层次结构配置系统。在这个系统中,下层设置自动继承上层设置。因此,可以根据服务器、站点或应用程序来调整配置设置。相关的配置文件如Inetpub\wwwroot\web.config、应用程序根或者子目录中的Web.config文件,以及Windows\Microsoft .NET\Framework\ version\Config\web.config和machine.config等。管理人员需要了解这些文件中的相关配置项作用,并根据实际情况作出正确有效的调整。例如与安全相关的配置属性allowDefinition,requirePermission等。
(2)注意与安全相关的配置项。在上一段所介绍的web.config文件中,包含很多与安全相关的配置项。限于篇幅,笔者仅将这些配置项列出。有关详细说明,读者可参考MSDN。这些与安全相关的配置项是<deployment>、<httpRuntime>、<compilation>、<pages>、<caching>、<trace>、<customErrors>、<forms>、<authorization>、<sessionState>、<httpCookies>、<trust>、<connectionStrings>、<membership>和<roleManager>。
(3)进行预编译。默认情况下,ASP.NET应用程序采用命令编译。也就是说,在页面和控件不被使用时将被编译。隐含地,组成应用程序的所有代码必须在运行时应用ASP.NET,包括页面、代码隐藏和App_Code类。显然,这不适用于实际发布环境。如果在部署前预编译应用程序,那么就可以只部署二进制值和配置文件。建议开发人员使用Visual Studio的一个新附加程序Web Deployment Project,它可以提供一些使用有效的额外选项。可选择预编译方式很多,也是开发和管理人员需要认真考虑的问题。
小结
本文大部分内容相当于一个检查表,开发和管理人员可以在部署和配置过程中用其进行对照检查。当然,安全性不能通用化,通常要根据环境确定,但是相信本文的指导原则可以是一个好的基础。遵循这些原则并实施一定措施,可以消除很多严重的安全问题。