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应用程序。

创建安全错误消息

如果您不小心,恶意用户可以从显示的错误消息中推断出有关您的应用程序的重要信息。请遵循以下准则:

不要编写错误消息来回显可能对恶意用户有用的信息,例如用户名。

配置应用程序不向用户显示详细错误。如果要显示用于调试的详细错误消息,请首先确定该用户是否是Web服务器的本地用户。有关详细信息,请参见如何:显示安全错误消息。

使用customErrorsconfiguration元素可以控制谁可以从服务器查看异常。

为容易出错的情况(如数据库访问)创建自定义错误处理。有关更多信息,请参阅ASP.NET页面和应用程序中的错误处理。

安全地保存敏感信息

敏感信息是你需要保密的任何信息。典型的敏感信息是密码或加密密钥。如果恶意用户可以获取敏感信息,那么受秘密保护的数据就会被泄露。遵循以下准则:

如果应用程序在浏览器和服务器之间传输敏感信息,请考虑使用安全套接字层(SSL)。有关如何使用SSL保护站点的详细信息,请参阅http://..microsoft.com的Microsoft知识库中的文章Q307267“HOW TO:使用Windows 2000中的安全套接字层保护XML Web服务”。

使用受保护的配置来保护配置文件(如Web.config或Machine.config文件)中的敏感信息。有关更多信息,请参阅使用受保护的配置加密配置信息。

如果您必须存储敏感信息,请不要将其保留在网页中,即使是您认为人们无法看到它的表单(例如服务器代码中)。

使用System.Security.Cryptography命名空间中提供的强加密算法。

安全使用Cookies

Cookie是保持用户特定信息可用的有用方法。但是,由于cookie被发送到浏览器的计算机,因此很容易受到欺骗或其他恶意攻击。请遵循以下准则:

不要在cookie中存储任何关键信息。例如,不要在cookie中存储用户的密码,即使是临时的。通常,不要在cookie中保存任何可能损害应用程序的东西(如果被欺骗)。相反,在cookie中保留对服务器上信息所在位置的引用。

将Cookie的有效期设置为最短的实际时间。尽可能避免永久性Cookies。

考虑加密cookie中的信息。

考虑将cookie上的Secure和HttpOnly属性设置为true。

防范拒绝服务威胁

恶意用户可能会破坏应用程序的间接方式是使其不可用。恶意用户可能会使应用程序太忙而无法为其他用户提供服务,或者只是导致应用程序崩溃。请遵循以下准则:

使用错误处理(例如,try-catch)。包含finally块,在发生故障时释放资源。

配置IIS以使用进程限制,这可以防止应用程序耗尽不成比例的CPU时间。

在使用或存储之前测试用户输入的大小限制。

在数据库查询上放置大小保护措施。例如,在ASP.NET网页中显示查询结果之前,请确保没有不合理数量的记录。

对文件上传设置大小限制,如果这些是您的应用程序的一部分。您可以使用以下语法在Web.config文件中设置限制,其中maxRequestLength值以千字节为单位:

您还可以使用RequestLengthDiskThreshold属性来减少大型上载和表单帖子的内存开销。

文章:https://docs.microsoft.com/en-us/previous-versions/aspnet/zdh19h94%28v%3dvs.100%29

原文地址:https://www.cnblogs.com/Tpf386/p/10144262.html