当前位置:首页 > > 充电吧
[导读]即使您对应用程序安全性的体验和了解非常有限,也应采取一些基本措施来保护您的 Web 应用程序。本主题的以下各部分提供了适用于所有 Web 应用程序的最低安全性准则。有关编写安全代码和确保应用程序安全的

即使您对应用程序安全性的体验和了解非常有限,也应采取一些基本措施来保护您的 Web 应用程序。本主题的以下各部分提供了适用于所有 Web 应用程序的最低安全性准则。有关编写安全代码和确保应用程序安全的最佳做法的更多详细信息,请参见由 Michael Howard 和 David LeBlanc 编写的书籍《编写安全代码》以及由“Microsoft Patterns and Practices”(Microsoft 模式和实践)提供的指导。

常规 Web 应用程序安全性建议

使用最少特权运行应用程序

了解您的用户

防止恶意用户的输入

安全地访问数据库

创建安全的错误消息

保证敏感信息的安全

安全地使用 Cookie

防止拒绝服务威胁

常规 Web 应用程序安全性建议

如果恶意用户可以使用简单方法进入您的计算机,即使是最精心设计的应用程序安全性也会失败。常规 Web 应用程序安全性建议包括以下内容:

经常备份数据,并将备份存放在安全的场所。

将您的 Web 服务器放置在安全的场所,使未经授权的用户无法访问它、关闭它、带走它,等等。

使用 Windows NTFS 文件系统,不使用 FAT32。NTFS 的安全性比 FAT32 高得多。有关详细信息,请参见 Windows 帮助文档。

使用不易破解的密码,保护 Web 服务器和同一网络上的所有计算机的安全。

遵循用于确保 Internet 信息服务 (IIS) 安全的最佳做法。有关详细信息,请参见“Windows Server TechCenter for IIS”(用于 IIS 的 Windows Server TechCenter)。

关闭任何不使用的端口并关闭不使用的服务。

运行监视网站通信量的病毒检查程序。

使用防火墙。有关建议,请参见 Microsoft 安全网站上的“Microsoft Firewall Guidelines”(Microsoft 防火墙准则)。

了解和安装来自 Microsoft 和其他供应商的最新安全更新。

使用 Windows 事件日志记录,并且经常检查这些日志,以查找可疑活动。这样的活动包括:反复尝试登录您的系统,以及向您的 Web 服务器发出数量巨大的请求。

使用最少特权运行应用程序

当您的应用程序运行时,它运行在一个具有本地计算机(还可能是远程计算机)的特定特权的上下文中。有关配置应用程序标识的信息,请参见 配置 ASP.NET 进程标识。

若要以最少特权运行,请遵循以下准则:

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

在具有最少实用特权的用户上下文中运行应用程序。

设置应用程序所需的所有资源上的权限(ACL 或访问控制列表)。使用最严格的设置。例如,如果在您的应用程序中是可行的,则将文件设置为只读。有关 ASP.NET 应用程序标识所需的最少 ACL 权限的列表,请参见 ASP.NET 必需的访问控制列表 (ACL)。

将您的 Web 应用程序的文件保存在应用程序根目录下的一个文件夹中。不要让用户指定在应用程序中进行文件访问的路径。这样有助于防止用户访问服务器的根目录。

了解您的用户

在许多应用程序中,用户有可能不必提供凭据即可访问网站。如果是这样,则您的应用程序通过在预定义用户的上下文中运行即可访问资源。默认情况下,此上下文是 Web 服务器上的本地 ASPNET 用户(Windows 2000 或 Windows XP)或 NETWORK SERVICE 用户 (Windows Server 2003)。

若要仅允许已授权用户进行访问,请遵循以下准则:

如果您的应用程序是 Intranet 应用程序,则将其配置为使用 Windows 集成安全性。这样,用户的登录凭据就可以用于访问资源。

如果您需要从用户收集凭据,则使用其中一种 ASP.NET 身份验证策略。有关示例,请参见 ASP.NET Forms 身份验证概述。

防止恶意用户的输入

通常,决不假定从用户获得的输入是安全的。对恶意用户来说,从客户端向您的应用程序发送潜在危险的信息是很容易的。若要帮助防止恶意输入,请遵循以下准则:

在窗体中,筛选用户输入以查找 HTML 标记,其中可能包含脚本。有关详细信息,请参见 如何:通过对字符串应用 HTML 编码在 Web 应用程序中防止脚本侵入。

决不回显(显示)未经筛选的用户输入。在显示不受信任的信息之前,对 HTML 进行编码以将潜在有害的脚本转换为显示字符串。

类似地,决不将未经筛选的用户输入存储在数据库中。

如果要接受来自用户的一些 HTML,则手动筛选它。在您的筛选器中,显式定义将要接受的内容。不要创建一个试图筛选出恶意输入的筛选器;因为预料到所有可能的恶意输入是非常困难的。

不要假定您从标头(通常通过 Request 对象)获得的信息是安全的。对查询字符串、Cookie 等采取安全措施。注意,浏览器向服务器报告的信息(用户代理信息)可以被假冒(如果此信息在您的应用程序中相当重要)。

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

视图状态是以编码格式存储在隐藏字段中的。默认情况下,它包含消息身份验证代码 (MAC),这样页可以确定视图状态是否已被篡改。

安全地访问数据库

数据库通常具有它们自己的安全性。Web 应用程序安全性的一个重要方面是设计一种应用程序安全地访问数据库的方式。请遵循这些指导:

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

如果在您的应用程序中切实可行,请使用 Windows 集成安全性以便只有 Windows 授权的用户才能访问数据库。集成安全性比使用 SQL Server 标准安全性更安全。

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

不要通过串联涉及用户输入的字符串创建 SQL 语句。相反,创建参数化查询并使用用户输入设置参数值。

如果您必须将用户名和密码存储在某个位置以用作数据库登录凭据,请安全地存储它们。如果可行,请对它们进行加密或计算哈希值。有关详细信息,请参见加密和解密数据。

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

创建安全的错误消息

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

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

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

使用 customErrors 配置元素控制谁可以查看服务器发出的异常。

对于容易发生错误的情况(如数据库访问)创建自定义错误处理方式。

保证敏感信息的安全

“敏感信息”是需要保密的任意信息。密码或加密密钥即是典型的敏感信息。如果恶意用户可以获得敏感信息,则该信息保护的数据将受到威胁。请遵循这些指导:

如果您的应用程序在浏览器和服务器之间传输敏感信息,请考虑使用安全套接字层 (SSL)。有关如何使用 SSL 加密网站的详细信息,请参见 Microsoft 知识库中的文章 Q307267,“How to: Secure XML Web Services with Secure Sockets Layer in Windows 2000”(如何:在 Windows 2000 中使用安全套接字层确保 XML Web 服务的安全)。

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

如果您必须存储敏感信息,即使是以您认为人们将无法看到它的形式(如在服务器代码中)进行保存,也不要将它保存在网页中。

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

安全地使用 Cookie

为了让用户特定的信息保持可用,Cookie 是一种容易而有用的方法。但是,由于 Cookie 会被发送到浏览器所在的计算机,因此它们容易被假冒或用于其他恶意用途。请遵循这些指导:

不要将任何关键信息存储在 Cookie 中。例如,不要将用户的密码存储在 Cookie 中,即使是暂时存储也不要这样做。作为一项原则,不要在 Cookie 中存储任何敏感信息。而是在 Cookie 中保存对信息在服务器上的位置的引用。

将 Cookie 的过期日期设置为可以设置的最短时间。尽可能避免使用永久的 Cookie。

考虑对 Cookie 中的信息加密。

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

防止拒绝服务威胁

恶意用户危害您的应用程序的一种间接方式是使其不可用。恶意用户可以使应用程序太忙而无法为其他用户提供服务,或者仅仅使应用程序出现故障。请遵循这些指导:

关闭或释放您使用的任何资源。例如,在使用完毕后,始终关闭数据连接和数据读取器,而且始终关闭文件。

使用错误处理机制(例如,try/catch 块)。包含 finally 块,以便万一失败就可以在其中释放资源。

将 IIS 配置为使用调节,这样可以防止应用程序消耗过多的 CPU。

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

对数据库查询设置大小保护措施,以防止大型查询耗尽系统资源。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭