其他资源
除了上面的概述中介绍的内容外,还有许多其他内容可供选择。以下主题更详细地讨论了代码访问安全性:
Introduction to Code Access Security(英文)
Code Access Security(英文)
Security Namespaces in Visual Studio(英文)
Web 应用程序
解决 Web 应用程序的安全问题,可以保护您的服务器免受恶意代码的攻击,并保护数据不被破坏。您可以使用多种方法来保护服务器。
通过禁用 XML Web services 的动态发现功能来禁止用户查找和运行您的 XML Web services。
在允许用户访问服务器之前,通过身份验证来验证用户的标识。
通过使用 ASPNET 进程标识,可以更好地调整用户可以使用的资源。
下面将详细讨论每一种方法。
动态发现
动态发现是 .NET 框架的一项功能,它允许 Web 浏览器查找在服务器上运行的 XML Web services。找到 XML Web service 后,用户就可以调用该 XML Web services 的方法。动态发现虽然为用户提供了强大的功能,但同时也给服务器带来潜在的安全危险。多数情况下,您不需要启用动态发现功能。安装 .NET 框架时,动态发现在默认情况下处于禁用状态。这并不表示 XML Web services 不可用,而只表示服务器将不提供可用服务的目录。客户端仍然可以使用 XML Web services,但您需要向其提供该服务的确切位置。
警告:禁用动态发现后,您需要将 XML Web services 的位置发送给客户端。
在部署服务器上,有两个项可以控制 XML Web services 的发现功能。第一项(machine.config 文件)控制服务器的整体发现功能。machine.config 文件是一个包含控制服务器上 Web 应用程序的设置的 XML 文件,它位于 \%windows%\Microsoft.NET\Framework\Version\Config 文件夹。此文件包含一个默认情况下被注释掉的元素。要启用发现功能,您需要删除这些注释字符。还需要使用 ASPNET 帐户来运行应用程序,如下一节“ASPNET 进程标识”中所述。
<!--<add verb="*" path="*.vsdisco"
type="System.Web.Services.Discovery.DiscoveryRequestHandler,
System.Web.Services, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" validate="false"/>-->
第二项是一个发现文件。发现文件可以是默认的发现文件 (default.vsdisco),也可以是 XML Web services 特定的发现文件。它是一个 XML 文件,包含有关 XML Web services 文件位置的信息。
要客户端能够发现特定的 XML Web services,您需要在 machine.config 文件中启用发现功能,并创建和部署应用程序的发现文件。发现文件是一个仅列出不包含 XML Web services 的路径的 XML 文件。下面提供了一个示例。有关创建和部署此文件的完整说明,请参阅 Deploying XML Web Services in Managed Code(英文)。
<?xml version="1.0" encoding="utf-8" ?>
<dynamicDiscovery xmlns="urn:schemas-dynamicdiscovery:disco.2000-03-17">
<exclude path="_vti_cnf" />
<exclude path="_vti_pvt" />
<exclude path="_vti_log" />
<exclude path="_vti_script" />
<exclude path="_vti_txt" />
<exclude path="Web References" />
</dynamicDiscovery>
如果您的部署服务器安装有 Visual Studio .NET,则 Web 根文件夹将包含默认的发现文件 (default.vsdisco),该文件是在 Visual Studio .NET 的安装过程中创建的。如果服务器中包含此文件并且在 machine.config 文件中启用了发现功能,则可以发现服务器上的所有 XML Web services。如果要禁止发现 XML Web services,则需要删除此文件。
警告:如果部署服务器安装了 Visual Studio .NET,则在服务器投入使用之前应该删除 default.vsdisco 文件。
建议您不要在已安装 Visual Studio .NET 的服务器上部署 XML Web services。Visual Studio .NET 安装程序会将可以使用的文件和用户都添加到您的系统上。您可以保护已安装 Visual Studio .NET 的系统的安全,但是,如果不需要在部署服务器上安装 Visual Studio .NET,建议您不要安装。
有关启用动态发现的详细信息,请参阅 Enabling Discovery for an XML Web services(英文)和 Fine-Tuning Discovery Mechanisms(英文)。
身份验证、模拟和委托
默认情况下,Web 应用程序将以匿名模式运行,也就是说,应用程序不需要任何有关用户标识的信息。这对于那些包含公共信息的站点非常适用。如果要对访问应用程序或其他资源的用户进行控制,则需要向应用程序添加身份验证。身份验证是识别应用程序的用户并验证该用户是否有权访问此应用程序的过程。ASP.NET 支持多种身份验证方法。其中最常用的方法有:
匿名 无需用户提供任何标识信息。此方法适用于包含公共内容的 Web 站点。如果需要个性化站点,则可以使用 cookie。有关在 ASP.NET 应用程序中使用 cookie 的详细信息,请参阅 Introduction to Web Forms State Management(英文)。
窗体 应用程序向用户提供一个登录窗体,要求用户提供登录信息(如姓名和密码)。窗体将被发送回服务器,服务器将该信息与数据仓库进行比较。
基本 基本身份验证是使用 Internet 信息服务 (IIS) 配置的,大部分浏览器都支持基本身份验证。如果启用,浏览器将提示用户输入姓名和密码,然后用 Base64 编码(此编码易于解密)将信息传回 ASP.NET 应用程序。此方法要求用户拥有 Windows 帐户。如果在基本身份验证之外再使用安全套接字层 (SSL),则可以确保此身份验证方法的安全性。有关 ASP.NET 中的 SSL 支持的信息,请参阅 Using Secure Sockets Layer(英文)。
简要 简要身份验证是使用 IIS 配置的,可用于运行 Microsoft Windows® 2000 或 Windows XP 的服务器。简要身份验证提供了比基本身份验证更高的密码加密级别。此方法要求用户拥有存储在 Microsoft Active Directory® 中的 Windows 帐户。
集成 Windows 集成 Windows 身份验证类似于基本身份验证和简要身份验证,唯一区别是用户的姓名和密码不传回 Web 应用程序。此方法尤其适用于 Intranet 环境。它要求用户拥有 Windows 帐户,并且只有 Internet Explorer 浏览器支持该方