更新:2007 年 11 月
为不同客户承载多个应用程序的共享 Web 服务器还必须确保每个应用程序及其数据的安全,保证服务器上的其他应用程序用户无法访问这些数据。以下过程详细说明了为保护共享服务器上的 ASP.NET 应用程序而采取的步骤。
保护共享服务器上的 ASP.NET 应用程序
在 Windows Server 2003 上承载 Web 应用程序。确保将应用程序的文件存储在使用 NTFS 文件系统格式化的驱动器上。
因为 Windows 2000 和 Windows XP Professional 上的所有 ASP.NET 应用程序都使用一个进程标识(本地 ASPNET 帐户)运行,所以只有在 Windows Server 2003 上运行时才能真正隔离一个应用程序。
在 Web 服务器上的**“计算机管理”管理单元(位于“管理工具”文件夹)中,选择“系统工具”下的“本地用户和组”**。添加一个新用户。该用户将是应用程序池的标识,也称为 ASP.NET 应用程序的“进程标识”。
在**“本地用户和组”下的“组”**文件夹中,将刚才为应用程序创建的标识添加到 IIS_WPG 组中。这将确保新标识具有以应用程序池标识身份运行的必要权限。
在 Web 服务器上使用 Internet 信息服务 (IIS) 管理器为应用程序创建应用程序池。
打开新应用程序池的属性页并选择**“标识”选项卡。将标识设置为“可配置”,并为先前创建的应用程序池标识提供“用户名”和“密码”**。
在 Internet 信息 (IIS) 服务管理器的**“网站”文件夹中,打开应用程序的属性页。将 Web 应用程序的“应用程序池”设置为刚才创建的应用程序池。可能需要单击“创建”**按钮将 Web 应用程序创建为应用程序(如果还未这样做)。
可以在一个应用程序池中放入多个应用程序。请确保仅将可以共享数据的应用程序放入应用程序池中,如某个客户的多个应用程序。
为应用程序创建一个目录,用于放置池中的应用程序的临时文件。在用于应用程序池中所有应用程序的 Web.config 文件中,使用 compilation 配置节中的 tempDirectory 属性将这个新目录指定为应用程序的临时目录。例如:
<configuration> <system.web> <compilation tempDirectory="C:\WebApps\AppPool1_Temp" /> </system.web> </configuration>
在 Windows 文件系统中。设置安全访问控制列表 (ACL),以便应用程序池标识和应用程序的任何模拟标识(请参见 ASP.NET 模拟)对构成应用程序的文件和子目录具有适当的访问权限,并且对先前创建的临时目录具有完全访问权限。从这些 ACL 中移除 IIS_WPG 组。确保服务器上的其他用户只有在需要时才可以访问这些文件和文件夹。这包括移除 Everyone 或 Users 组等常规组。确保所有模拟标识都包括在 ASP.NET 必需的访问控制列表 (ACL) 中列出的 ACL 中。
还可以使用受保护的配置加密 Web.config 文件中的任何敏感信息来提高应用程序的安全性。有关更多信息,请参见使用受保护的配置加密配置信息。