ASP.NET 页在进程或 Windows 程序中执行。所有 Windows 程序都使用特定的安全标识运行。默认情况下,ASP.NET 进程在预定义的 Windows 标识下运行。此外,通过配置应用程序以使用模拟功能,可以将 ASP.NET 设置为在不同的标识下运行,或者在提交请求的用户的 Windows 标识下运行。
为了提高 ASP.NET 应用程序的安全性,应确保运行 ASP.NET 进程所使用的标识仅具有运行应用程序所需的最低权限。在出现违反安全性的操作时,此做法可以减少 ASP.NET 公开的任何资源中的漏洞。
在运行 Microsoft Windows Server 2003 和 Internet 信息服务 (IIS) 6.0 的 Web 服务器上,ASP.NET 进程在该 Web 应用程序的应用程序池中运行。应用程序池定义运行 ASP.NET 所使用的标识(默认情况下为 NETWORK SERVICE 帐户)。在早期版本的 IIS 上(在 Microsoft Windows 2000 和 Windows XP Professional 操作系统中),ASP.NET 在 ASP.NET 辅助进程 (Aspnet_wp.exe) 中运行。运行 ASP.NET 所使用的标识由 Aspnet_wp.exe 进程的标识定义(默认情况下为 ASPNET 帐户)。
若要在运行 Windows Server 2003 的服务器上为 ASP.NET 应用程序指定标识,请使用 IIS 管理器为 ASP.NET 应用程序配置应用程序池的标识。此外,还必须将应用程序池的标识添加到服务器计算机上的 IIS_WPG 组中。
若要在 Windows 2000 或 Windows XP Professional 下使用 ASP.NET 辅助进程自身的帐户来运行它,可以将以下两个属性应用于 Web 服务器计算机的 Machine.config 文件的 <processModel> 配置元素:
-
userName,是进程将在运行时使用的 Windows 帐户名。
-
password,是帐户的明文密码。在配置文件中存储明文密码会有安全风险。如果将凭据存储在配置文件中,则应使用受保护的配置对 <processModel> 配置元素的内容进行加密。有关更多信息,请参见使用受保护的配置加密配置信息。对于在 Internet 上发布的应用程序,应使用以特定标识运行应用程序的其他方法,例如模拟 IIS 提供的匿名标识。有关更多信息,请参见将 IIS 身份验证用于 ASP.NET 模拟。
下面的示例演示了如何在配置文件的 <processModel> 元素中设置这些属性,以在本地用户帐户下运行辅助进程。
<system.web> <processModel enable="true" userName="LOCALMACHINE\IUSR_ProcessUser" password="%Hco94*#QW12"/> </system.web>
除了将 userName 属性设置为现有 Windows 标识的名称之外,还可以将其设置为预定义的名称 System 或 Machine。System 帐户运行辅助进程所使用的标识与 IIS 本身相同(通常为 SYSTEM)。
![]() |
---|
建议不要在 System 帐户下运行应用程序,因为该帐户具有更高的权限,如果 ASP.NET 进程受到威胁,可能会带来安全风险。 |
Machine 帐户使用名为 ASPNET 的特殊帐户运行辅助进程,ASPNET 具有有限的权限。无论使用哪个标识,进程都不需要向操作系统提供凭据。
![]() |
---|
要使 ASP.NET 应用程序正常工作,必须确保进程标识能够访问 ASP.NET 必需的访问控制列表 (ACL) 中所列的访问控制列表 (ACL)。另外,在运行 IIS 5.0 的服务器上,必须向进程标识授予对 IIS 元数据库的读访问权限,这可以通过使用 Aspnet_regiis.exe 工具并指定 -ga 选项(例如 aspnet_regiis -ga "UserDomain\ApplicationUser")来完成。 |