⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 。net安全性.txt

📁 asp.net 安全设计方案
💻 TXT
📖 第 1 页 / 共 5 页
字号:
asp.net 安全性
本章内容
本指南中论述的分布式 Web 应用程序开发的中心一环就是 ASP.NET。它提供了一组丰富的、易于使用的安全功能,来帮助创建安全的 Web 应用程序。ASP.NET 设计为与 Internet 信息服务 (IIS)、Windows 平台和 .NET Framework 的现有安全功能一起使用,同时兼具灵活性和可扩展性。这意味着您可以构建能够与您的应用程序紧密集成的自定义安全机制。

本章提供的指南和建议可以帮助您解决在构建安全的 ASP.NET Web 应用程序时遇到的身份验证、授权和安全通信问题。

注意:本章提供的很多指导和建议同样适用于 ASP.NET Web 服务和 ASP.NET 承载的 .NET Remoting 对象(将分别在第 10 章和第 11 章中详细讨论)的开发。

返回页首
目标
本章的目标是:

? 保护您的 ASP.NET 应用程序。
 
? 保护由 ASP.NET 应用程序保存的机密和状态信息。
 
? 理解 ASP.NET 应用程序的安全体系结构,并了解如何协同使用 IIS、Windows、.NET Framework 和 ASP.NET 的安全功能以确保分布式 Web 应用程序的安全。
 
? 选择适用于您的应用程序的身份验证和授权策略。
 
? 理解 ASP.NET 进程标识和模拟在您的应用程序访问下游资源(例如文件和数据库)时起到的作用。
 
? 结合使用产品配置工具和编程技术,实现 ASP.NET web 应用程序的安全设计。
 

返回页首
适用范围
本章适用于以下产品和技术:

? Windows XP 或 Windows 2000 Server (service pack 3) 和更高版本的操作系统
 
? Microsoft Internet 信息服务 5.0 和更高版本
 
? Microsoft Active Directory
 
? .NET Framework 版本 1.0 (Service Pack 2)
 
? Visual Studio 1.0 .NET 和更高版本
 
? Visual C# .NET
 
? SQL Server 2000 (service pack 2) 和更高版本
 

返回页首
如何使用本章内容
若要学好本章内容:

? 您必须具有使用 Visual C# .NET 和 Visual Studio .NET 编程的经验。
 
? 您必须具有开发和配置 ASP.NET Web 应用程序的经验。
 
? 您必须具有配置 IIS 安全性的经验。
 
? 您必须具有使用 Windows 管理工具配置 Windows 安全性和创建用户帐户的经验。
 
? 您必须具有配置 Active Directory 的经验。
 
? 您必须具有开发和配置企业服务 (COM+) 应用程序的经验。
 
? 阅读第 1 章简介。这一章说明了身份验证、授权和安全通信对于分布式 Web 应用程序的重要性。
 
? 阅读第 2 章 ASP.NET 应用程序的安全模型。这一章概述了创建分布式 ASP.NET Web 应用程序所采用的体系结构和技术,并重点说明了身份验证、授权和安全通信在该体系结构中适用的位置。
 
? 阅读第 3 章身份验证和授权。这一章介绍了使用 ASP.NET 时可用的身份验证和授权机制。
 
? 阅读第 4 章安全通信。这一章介绍了在 ASP.NET 和分布式 Web 应用程序的其他元素之间可用于实现安全通信的各种技术。
 
? 请阅读以下章节,其中逐步介绍了如何实现本章中所述的许多技术:

? 如何创建自定义帐户来运行 ASP.NET
 
? 如何在 Web 服务器上设置 SSL
 
? 如何使用 SSL 来确保与 SQL Server 2000 安全通信
 
? 如何使用 IPSec 在两个服务器之间进行安全通信
 
? 如何实现 IPrincipal
 
? 如何将窗体身份验证用于 SQL Server 2000
 
? 如何将窗体身份验证用于 Active Directory
 
? 如何利用窗体身份验证创建 GenericPrincipal 对象
 
? 如何为 Windows 2000 实现 Kerberos 委派
 
 

返回页首
ASP.NET 安全体系结构
ASP.NET 与 IIS、.NET Framework 和操作系统所提供的基础安全服务配合使用,共同提供一系列身份验证和授权机制。图 8.1 中总结了这些情况。


图 8.1
ASP.NET 安全服务

图 8.1 阐释了 IIS 和 ASP.NET 所提供的身份验证和授权机制。当客户端发出 Web 请求时,就会发生下面一系列身份验证和授权事件:

1.
 接收来自网络的 HTTP(S) Web 请求。可以使用 SSL 确保服务器标识(使用服务器证书)和客户端标识(可选)的安全。

注意:SSL 还提供了一个安全通道,以便保护在客户端和服务器之间传送的机密数据。
 
2.
 IIS 使用基本、摘要、集成(NTLM 或 Kerberos)或证书身份验证对调用方进行身份验证。如果站点的所有或部分内容不需要经过身份验证即可访问,则可以将 IIS 配置为使用匿名身份验证。IIS 为每个已进行身份验证的用户创建一个 Windows 访问令牌。如果选择匿名身份验证,则 IIS 为匿名 Internet 用户帐户(默认情况下为 IUSR_MACHINE)创建访问令牌。
 
3.
 IIS 授予调用方访问所请求资源的权限。使用附加到所请求资源的 ACL 定义的 NTFS 权限授权访问。IIS 也可以配置为只接受来自特定 IP 地址的客户端计算机的请求。
 
4.
 IIS 将已进行身份验证的调用方的 Windows 访问令牌传递到 ASP.NET(如果使用的是匿名身份验证,则它可能是匿名 Internet 用户的访问令牌)。
 
5.
 ASP.NET 对调用方进行身份验证。 
如果将 ASP.NET 配置为使用 Windows 身份验证,则此时不会发生任何其他的身份验证。ASP.NET 将接受它从 IIS 收到的任何令牌。

如果将 ASP.NET 配置为使用窗体身份验证,将根据数据存储(通常为 Microsoft? SQL Server? 数据库或 Active Directory? 目录服务)对调用方提供的凭据进行身份验证(使用 HTML 窗体)。如果将 ASP.NET 配置为使用 Passport 身份验证,则将用户重定向到 Passport 站点,然后 Passport 身份验证服务对用户进行身份验证。
 
6.
 ASP.NET 授权访问所请求的资源或操作。
UrlAuthorizationModule(系统提供的 HTTP 模块)使用在 Web.config 中配置的授权规则(具体来说就是 <authorization> 元素),确保调用方可以访问所请求的文件或文件夹。

在 Windows 身份验证中,FileAuthorizationModule(另一个 HTTP 模块)检查调用方是否具有访问所请求资源的必要权限。将调用方的访问令牌与保护资源的 ACL 进行比较。 

也可以使用 .NET 角色(以声明方式或编程方式)确保给调用方授予访问所请求资源或执行所请求操作的权限。
 
7.
 应用程序中的代码使用特定标识来访问本地和/或远程资源。默认情况下,ASP.NET 不执行模拟,因此,配置的 ASP.NET 进程帐户提供标识。也可以选择原调用方的标识(如果启用了模拟)或已配置的服务标识。
 

网关守卫
ASP.NET Web 应用程序中的授权点或网关守卫是由 IIS 和 ASP.NET 提供的:

IIS
如果禁用了匿名身份验证,则 IIS 只允许来自特定用户的请求,即它可以在其自己的域或受信任域中验证这些用户的身份。

对于静态文件类型(例如 .jpg、.gif 和 .htm 文件,即没有映射到 ISAPI 扩展的文件),IIS 使用与所请求文件关联的 NTFS 权限执行访问控制。 

ASP.NET
ASP.NET 网关守卫包括 UrlAuthorizationModule、FileAuthorizationModule 以及主体权限要求和角色检查。

UrlAuthorizationModule

可以配置应用程序 Web.config 文件中的 <authorization> 元素,控制哪些用户和用户组应有权访问应用程序。授权是以存储在 HttpContext.User 中的 IPrincipal 对象为基础的。

FileAuthorizationModule

对于由 IIS 映射到 ASP.NET ISAPI 扩展 (Aspnet_isapi.dll) 的文件类型,使用已进行身份验证的用户的 Windows 访问令牌(可能为 IUSR_MACHINE),根据附加到所请求的 ASP.NET 文件中的 ACL 自动执行访问检查。 

注意:模拟并非进行文件授权所必需的。

FileAuthorizationModule 类仅对所请求的文件执行访问检查,而不对所请求页面中的代码访问的文件执行访问检查,但 IIS 对这些文件执行访问检查。

例如,如果您请求 Default.aspx 并且它包含一个嵌入的用户控件 (Usercontrol.ascx),该控件又包含一个图像标记(指向 Image.gif),则 FileAuthorizationModule 对 Default.aspx 和 Usercontrol.ascx 执行访问检查,因为 IIS 将这些文件类型映射到 ASP.NET ISAPI 扩展。 

FileAuthorizationModule 不对 Image.gif 执行检查,因为它是由 IIS 内部处理的静态文件。但是,由于 IIS 对静态文件执行访问检查,因此,仍须使用进行相应配置的 ACL 给已进行身份验证的用户授予读取该文件的权限。

图 8.2 中显示了此方案。 

系统管理员注意事项:需要给已进行身份验证的用户授予读取此方案中涉及的所有文件的 NTFS 权限。唯一可变化的方面是使用哪个网关守卫来执行访问控制。ASP.NET 进程帐户只需要对 ASP.NET 注册文件类型的读访问权限。


图 8.2
IIS 和 ASP.NET 网关守卫一起使用

在此方案中,您可以在文件入口处禁止访问。如果您配置了附加到 Default.aspx 的 ACL 并且拒绝访问某个特定的用户,则 Default.aspx 中的代码无法将用户控件或任何嵌入图像发送到客户端。如果该用户直接请求图像,则 IIS 亲自执行访问检查。

主体权限要求和明确的角色检查

除了可以用 IIS 和 ASP.NET 配置的网关守卫外,还可以将主体权限要求(以声明方式或编程方式)用作附加的细分访问控制机制。通过使用主体权限检查(由 PrincipalPermissionAttribute 类执行),您可以根据各个用户的标识和组成员身份(由附加到当前线程的 IPrincipal 对象定义)控制对类、方法或个别代码块的访问。

注意:用于请求角色成员身份的主体权限要求与调用 IPrincipal.IsInRole 来测试角色成员身份不同;如果调用方不是指定角色的成员,则前者产生异常,而后者仅返回一个布尔值以确认角色成员身份。

在 Windows 身份验证中,ASP.NET 自动将一个代表已进行身份验证的用户的 WindowsPrincipal 对象附加到当前的 Web 请求(使用 HttpContext.User)。窗体身份验证和 Passport 身份验证创建具有相应标识但没有角色的 GenericPrincipal 对象,并将它附加到 HttpContext.User。

更多信息

? 有关配置安全性的详细信息,请参见本章后面的配置安全性。
 
? 有关编程安全性(和 IPrincipal 对象)的详细信息,请参见本章后面的编程安全性。
 

返回页首
身份验证和授权策略
ASP.NET 提供了若干以声明方式和编程方式进行授权的机制,这些机制可与各种身份验证方案配合使用。这样,您就可以开发深入的授权策略以及可以配置为提供各种粒度级别(例如,基于角色的每用户或每用户组)的授权策略。 

本节说明一组常用身份验证选项的可用授权选项(可进行配置和编程)。 

下面概述了这些身份验证选项:

? 带模拟功能的 Windows 身份验证
 
? 不带模拟功能的 Windows 身份验证
 
? 使用固定标识的 Windows 身份验证
 
? 窗体身份验证
 
? Passport 身份验证
 

可用的授权选项
下表列出了一组可用的授权选项。对于每个选项,该表都指出了是否需要 Windows 身份验证和/或模拟。如果特定授权选项不需要 Windows 身份验证,则该选项适用于所有其他的身份验证类型。可以使用该表优化身份验证/授权策略。

表 8.1:Windows 身份验证和模拟要求

授权选项 需要 Windows 身份验证 需要模拟 
FileAuthorizationModule
 
UrlAuthorizationModule
 
主体权限要求
 
.NET 角色
 
企业服务角色
 是(在 ASP.NET Web 应用程序中)
 
NTFS 权限(用于直接请求的静态文件类型;没有映射到 ISAPI 扩展的文件类型)
 不适用 - ASP.NET 不处理这些文件。
在任何(非匿名)IIS 身份验证机制中,应为各个已进行身份验证的用户配置权限。
在匿名身份验证中,应为 IUSR_MACHINE 配置权限。
 否(IIS 执行访问检查)
 
NTFS 权限(用于 Web 应用程序代码访问的文件)
如果使用模拟,请根据模拟的 Windows 标识配置 ACL,该标识可以是原调用方,也可以是 Web.config 中的 <identity> 元素指定的标识。 
 

带模拟功能的 Windows 身份验证
以下配置元素显示了如何在 Web.config 或 Machine.config 中明确声明启用 Windows (IIS) 身份验证和模拟功能。

注意:应根据每个应用程序的具体情况,在各应用程序的 Web.config 文件中配置身份验证。

<authentication mode="Windows" />
<identity impersonate="true" />

在此配置中,ASP.NET 应用程序代码模拟已由 IIS 验证身份的调用方。 

可配置的安全性
当您将 Windows 身份验证和模拟功能一起使用时,可以使用下列授权选项:

? Windows ACL

? 客户端请求的资源。ASP.NET FileAuthorizationModule 对映射到 ASP.NET ISAPI 的请求文件类型执行访问检查。它使用原调用方的访问令牌和附加到请求的资源的 ACL,以便执行访问检查。 
对于静态文件类型(没有映射到 ISAPI 扩展),IIS 使用调用方的访问令牌和附加到文件的 ACL 执行访问检查。
 
? 应用程序访问的资源。可以根据原调用方,在应用程序访问的资源(文件、文件夹、注册表项和 Active Directory 对象等)上配置 Windows ACL。 
 
 
? URL 授权。在 Web.config 中配置 URL 授权。在 Windows 身份验证中,用户名采用 DomainName\UserName 的形式,并且角色与 Windows 组一一对应。

<authorization>
  <deny user="DomainName\UserName" />
  <allow roles="DomainName\WindowsGroup" />
</authorization>

 
? 企业服务 (COM+) 角色。角色保存在 COM+ 目录中。可以使用“组件服务”管理工具或脚本配置角色。
 

编程安全性
编程安全性是指 Web 应用程序代码中的安全检查。在使用 Windows 身份验证和模拟功能时,可以使用下列编程安全设置选项:

? PrincipalPermission 请求

? 强制方式(嵌入方法的代码内)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -