技术开发 频道

ASP.NET 2.0应用程序安全强化纵览


提高Web服务器安全

   提高Web服务器安全涉及内容很多,但这也没有什么可畏惧的。管理人员关键是要弄清楚哪些类型的活动内容是允许的,运行应用程序的安全环境和这些应用程序应该访问的资源等。具体而言,可从以下几个方面入手实现安全性的提高。

  (1)配置应用程序池。应用程序池代表IIS 6中的工作进程。每一个应用程序池都会获得一个w3wp.exe的实例,该实例承载了CLR、ASP.NET和应用程序。管理人员可以配置这个工作进程的许多方面,例如回收设置和状态监视,以便提高安全性。

   (2)配置适当的Web服务扩展。Web服务扩展是一个比较陌生的名字,但是它们的设置定义了服务器上允许的活动内容。简单而言,这是一个全局列表,其显示了允许调用的ISPAI扩展和CGI网关。管理人员应该只允许真正需要的服务器技术,例如ASP.NET。

   (3)删除服务器中不必要的Web内容。例如,示例应用程序,产品说明文件或不用的应用程序。其原因在于,服务器上的可执行代码越多,就越容易被利用进行攻击。特别是示例应用程序,长久以来它一直是一个易受攻击的方面。同样,将Web应用程序目录移动到非系统分区中。这样可以防止所有类型的目录遍历攻击。

   (4)删除在IIS中所有没有必要配置HTTP头。例如,通过ASP.NET删除X -Powered。管理人员可以在HTTP Headers下的Web站点属性对话框中的IIS MMC中找到这个设置。

   (5)为每个站点配置日志。默认情况下,Referer字段没有记录,如果要分析引用到站点的用户,必须手动启用这个措施。要注意,将日志放置到一个独立的分区中,并要定期备份它们。在记录日志的同时,要记得使用工具分析日志,例如使用LogParser。

   (6)检查传入的请求。这个工作可使用URLScan来完成。URLScan是一个ISAPI过滤器,其通过使用白名单或黑名单的方式定义规则,例如允许或拒绝的扩展、谓词、URL序列和标头。另外,还可以指定实体、查询字符串和标头的最大长度,还可以从HTTP响应中删除服务器头。

   (7)调整访问控制列表。管理人员必须调整三个不同目录中的ACL,这可以通过使用Aspnet_regiis工具来实现。但是,如果要进行真正的最少权限配置,仍然建议手动进行调整。需要调整的方面包括Web应用程序文件、临时程序集目录、Temp目录。

   (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,它可以提供一些使用有效的额外选项。可选择预编译方式很多,也是开发和管理人员需要认真考虑的问题。

小结

   本文大部分内容相当于一个检查表,开发和管理人员可以在部署和配置过程中用其进行对照检查。当然,安全性不能通用化,通常要根据环境确定,但是相信本文的指导原则可以是一个好的基础。遵循这些原则并实施一定措施,可以消除很多严重的安全问题。
0
相关文章