Web应用程序的基本安全实践

创建安全Web应用程序的主题非常广泛。它需要研究以了解安全漏洞。您还需要熟悉Windows、.NET框架和ASP.NET的安全设施。最后,有必要了解如何使用这些安全特性来对付威胁。

即使您没有安全方面的经验,也应采取基本措施来保护Web应用程序。以下列表提供了适用于所有Web应用程序且应遵循的最低安全性准则:

一般Web应用程序安全建议

以最少的特权运行应用程序

了解您的用户

防止恶意用户输入

安全访问数据库

创建安全错误消息

安全地保密

安全使用Cookies

防范拒绝服务威胁

有关帮助您设计,开发,配置和部署更安全的ASP.NET Web应用程序的全面详细的安全指南,请参阅Microsoft模式和实践Web站点上提供的安全模块。

一般Web应用程序安全建议

如果恶意用户可以使用简单的方法访问您的计算机,即使最复杂的应用程序安全性也会失败。请遵循以下准则:

经常备份,并保持备份物理安全。

保持Web服务器计算机的物理安全,以便未经授权的用户无法访问,关闭或接受它。

使用Windows NTFS文件系统,而不是FAT32。 NTFS提供比FAT32更多的安全性。有关详细信息,请参阅Windows文档。

使用强密码保护Web服务器计算机和同一网络上的所有计算机。

安全的IIS。有关详细信息,请参阅Microsoft TechNet安全中心网站。

关闭未使用的端口并关闭未使用的服务。

运行监控入站和出站流量的病毒检查程序。

建立并实施一项政策,禁止用户将密码记录在易于查找的位置。

使用防火墙。有关建议,请参阅Microsoft安全站点上的Microsoft防火墙指南。

从Microsoft和其他供应商安装最新的安全修补程序。例如,请参阅Microsoft TechNet安全中心网站,其中列出了所有Microsoft产品的最新安全公告。其他供应商有类似的网站。

使用Windows事件日志记录并经常检查日志中是否存在可疑活动。这包括重复尝试登录系统以及针对Web服务器的大量请求。

运行具有最小权限的应用程序

当应用程序运行时,它在本地计算机上和远程计算机上具有特定特权的上下文中运行。有关配置应用程序标识的信息,请参阅配置ASP.NET进程标识。若要以最少的特权运行,请遵循以下准则:

Configuring ASP.NET Process Identity

不要使用系统用户(管理员)的身份运行应用程序。

在具有最低实际权限的用户的上下文中运行该应用程序。

设置应用程序所需的所有资源的权限(访问控制列表或ACL)。使用最不允许的设置。例如,如果在应用程序中实用,则将文件设置为只读。有关ASP.NET应用程序标识所需的最低ACL权限的列表,请参阅ASP.NET必需访问控制列表(ACL)

将Web应用程序的文件保存在应用程序根目录下的文件夹中。不允许用户选择为应用程序中的任何文件访问指定路径。这有助于防止用户访问服务器的根目录。

了解您的用户

在许多应用程序中,用户匿名访问站点(无需提供凭据)。如果是,则应用程序通过在预定义用户的上下文中运行来访问资源。默认情况下,此上下文是Web服务器计算机上的本地ASPNET用户(在Windows 2000或Windows XP上)或NETWORK SERVICE用户(在Windows Server 2003上)。要限制对经过身份验证的用户的访问,请遵循以下准则:

如果您的应用程序是Intranet应用程序,请将其配置为使用Windows集成安全性。这样,用户的登录凭据可用于访问资源。有关更多信息,请参阅ASP.NET模拟。

切勿回显(显示)未经过滤的用户输入。在显示不受信任的信息之前,编码HTML以将可能有害的脚本转换为显示字符串。

永远不要在数据库中存储未过滤的用户输入。

如果您想接受来自用户的一些HTML,请手动筛选它。在过滤器中,显式地定义您将接受的内容。不要创建试图过滤掉恶意输入的过滤器;很难预测所有可能的恶意输入。

不要假设从HTTP请求头(在HttpRequest对象中)获得的信息是安全的。对查询字符串、cookie等使用安全措施。请注意,浏览器向服务器报告的信息(用户代理信息)可能被欺骗,以防在应用程序中发生重要情况。

如果可能,请勿将敏感信息存储在可从浏览器访问的位置,例如隐藏字段或Cookie。例如,不要在cookie中存储密码。

注意:视图状态以编码格式存储在隐藏字段中。默认情况下,它包含消息身份验证代码(MAC),以便页面可以确定视图状态是否被篡改。如果敏感信息存储在视图状态,则通过将页面的ViewStateEncryptionMode属性设置为true进行加密。

安全地访问数据库

数据库通常具有自己的安全性。安全Web应用程序的一个重要方面是为应用程序设计一种安全访问数据库的方法。请遵循以下准则:

使用数据库的固有安全性来限制谁可以访问数据库资源。确切的策略取决于您的数据库和您的应用程序:

如果在您的应用程序中可行,请使用集成安全性,以便只有经过Windows身份验证的用户才能访问数据库。集成安全性比将显式凭据传递到数据库更安全。

如果您的应用程序涉及匿名访问,请创建权限非常有限的单个用户,并通过以此用户身份进行连接来执行查询。

不要通过连接涉及用户输入的字符串来创建SQL语句。而是创建参数化查询并使用用户输入来设置参数值。

如果必须在某个地方存储用户名和密码作为数据库登录凭据,则将它们存储在Web.config文件中,并用受保护的配置保护该文件。有关详细信息,请参阅使用受保护的配置加密配置信息。

有关安全访问数据的更多信息,请参阅保护数据访问和保护ADO.NET应用程序。

猜你喜欢

转载自www.cnblogs.com/Tpf386/p/10144262.html