保证配置文件属性的安全

更新:2007 年 11 月

可以使用 ASP.NET 配置文件功能在数据源(如数据库)中存储和检索用户设置。在应用程序的配置文件中指定组成用户配置文件的属性和组。在运行时,ASP.NET 使用配置信息为每个配置文件属性动态生成一个具有强类型访问器的类。然后使用静态 Profile 属性公开此类。配置文件提供程序将配置文件属性值以明文 XML 格式或以序列化二进制格式存储在数据源中。

通过遵循编码和配置的最佳做法,可以提高应用程序的安全性。利用 Microsoft Windows 和 Microsoft Internet 信息服务 (IIS) 的最新安全更新以及 Microsoft SQL Server 或其他配置文件数据源的任何更新,使应用程序 Web 服务器始终保持最新也很重要。

有关编写安全代码和确保应用程序安全的最佳做法的更多信息,请参见由 Michael Howard 和 David LeBlanc 合著的 Writing Secure Code(《编写安全的代码》),并遵照“Microsoft Patterns and Practices”(Microsoft 模式和实践)(https://www.microsoft.com/resources/practices/default.mspx) 中提供的建议。

安全的配置文件配置

ASP.NET 配置文件功能在默认情况下处于启用状态。尽管默认的配置设置被设置为最安全的值,如果应用程序并不需要用户配置文件功能,那么我们还是建议您禁用该功能。有关配置文件配置设置及其默认值的信息,请参见 profile 元素(ASP.NET 设置架构)。默认情况下,禁用可为配置文件属性设置的匿名标识。有关匿名标识配置设置及其默认值的更多信息,请参见 anonymousIdentification 元素(ASP.NET 设置架构)

保证配置值的安全

当在配置文件中存储敏感信息时,建议您使用受保护配置对敏感值进行加密。特别敏感的信息包括存储在 machineKey 配置元素中的加密密钥,以及存储在 connectionStrings 配置元素中用于连接数据源的连接字符串。有关更多信息,请参见 使用受保护的配置加密配置信息

保证与配置文件数据源的连接安全

连接字符串

注意,对用于与运行 SQL Server 或其他数据源的计算机进行通信的连接字符串中存储的敏感性信息进行保护是非常重要的。为了保证数据库连接的安全,建议您使用受保护配置对配置中的连接字符串信息进行加密。有关更多信息,请参见 使用受保护的配置加密配置信息

使用集成安全性连接 SQL Server

建议您使用集成安全性连接运行 SQL Server 的计算机,以防止连接字符串受到危害,并防止任何用户 ID 和密码信息被公开。在指定使用集成安全性连接运行 SQL Server 的计算机的连接时,配置文件提供程序将恢复为进程标识。建议确保运行 ASP.NET 的进程的标识(例如,应用程序池)为默认的进程帐户或受限制的用户帐户。有关更多信息,请参见 ASP.NET 模拟

SQL Server 数据库权限

默认情况下用于存储配置文件信息的 SQL Server 数据库包括将用户访问限制为仅应用程序必需的权限的数据库角色和视图。建议为连接到 SQL Server 配置文件数据库的用户 ID 分配所需的最小特权。有关更多信息,请参见 SQL Server 应用程序服务数据库中的角色和视图

保护配置文件数据源中的敏感数据

默认的用户配置文件提供程序并不对配置文件数据源中存储的值进行加密。建议在将任何敏感信息存储到配置文件数据源之前对其进行加密,以避免数据源受到危害时公开敏感信息。可以在配置文件属性中存储值之前对敏感数据进行加密,也可以对 ProfileBaseProfileProvider 类进行扩展以提供加密功能。

防止在应用程序间共享匿名配置文件数据

如果对应用程序和其使用的配置文件属性启用了匿名标识,则匿名配置文件属性值就有向其他应用程序公开的风险。当匿名标识 cookiePath 属性设置为一个包含多个应用程序的路径时,以及一个公共域中存在多个应用程序时,会发生这种情况。

当在用户配置文件中使用匿名标识并且打算将各个应用程序中的匿名用户分离时,建议您在 machineKey 元素中为每个应用程序指定单独的加密密钥,将匿名标识 cookie 的范围设置到特定的应用程序,并且对于每个应用程序将 ApplicationName 属性设置为不同的值。

保证使用配置文件的网页的安全

对于使用存储在配置文件属性中的敏感数据的应用程序页,应使用标准 Web 安全机制来保证其安全。这些安全机制包括使用安全套接字层 (SSL),以及要求用户登录之后才能执行诸如更新用户信息或删除用户之类的敏感操作。此外,应避免在 cookie 中存储敏感数据。

防范拒绝服务攻击

如果大量客户端同时调用执行更新或长时间运行的搜索操作的 ProfileManager 类方法,则这些方法可能会降低配置文件数据源的响应能力。若要降低应用程序遭受拒绝服务攻击的风险,请仅允许管理用户访问执行与配置文件关联的数据库更新或搜索的 ASP.NET 页。

错误信息和事件

异常

为了防止敏感信息被公开,请对应用程序进行配置,使其不显示详细的错误信息,或仅当应用程序在 Web 服务器本地运行时才显示详细的错误信息。有关更多信息,请参见 customErrors 配置元素。

事件日志

ASP.NET 配置文件功能使用 ASP.NET 运行状况监视记录某些错误条件的信息,默认情况下,ASP.NET 运行状况监视会在事件日志中存储信息。如果服务器计算机运行的是 Windows Server 2003,则可通过保证事件日志的安全,以及设置有关事件日志的大小、保留时间等参数,来防止对事件日志的间接拒绝服务攻击,从而提高应用程序的安全性。

跟踪信息

Web 服务器可以配置为在发生有关配置文件功能的特定操作时进行跟踪,并将跟踪信息存储在日志文件中。由于敏感信息(如用户名)可以存储在跟踪日志文件中,因此建议您仅允许管理员启用跟踪,配置跟踪日志文件的位置和访问跟踪日志文件。

自定义配置文件提供程序

在创建用于数据库访问的自定义配置文件提供程序时,请确保遵守最佳安全做法以防止如 SQL 注入攻击等一些攻击。使用自定义配置文件提供程序时,请确保已根据最佳安全做法对提供程序进行了检查。

请参见

概念

ASP.NET 配置文件属性概述

其他资源

保证 ASP.NET 网站的安全