打印本文 打印本文 关闭窗口 关闭窗口
ASP.NET 安全性
作者:武汉SEO闵涛  文章来源:敏韬网  点击数8964  更新时间:2009/4/23 10:44:53  文章录入:mintao  责任编辑:mintao
更多信息

有关窗体身份验证的详细信息,请参见本章后面的“窗体身份验证“。

有关 URL 授权的详细信息,请参见本章后面的“URL 授权注意事项”。

Passport 身份验证

以下配置元素显示了如何在 Web.config 中以声明方式启用 Passport 身份验证。

<authentication mode="Passport" />

何时使用

如果应用程序用户没有 Windows 帐户,并且您希望实现单次登录解决方案,则应该在 Internet 上使用 Passport 身份验证。如果用户以前使用 Passport 帐户在参与的 Passport 站点进行登录,则不必登录到使用 Passport 身份验证配置的站点。

返回页首返回页首

配置安全性

本节说明配置 ASP.NET Web 应用程序安全性所需的实际步骤。 3 总结了这些情况。

F08sn03_t

3. 配置 ASP.NET 应用程序安全性

配置 IIS 设置

要配置 IIS 安全性,您必须执行以下步骤:

1.

(可选)安装 Web 服务器证书(如果需要 SSL 的话)。 有关详细信息,请参见“How To Set Up SSL on a Web Server”。

2.

配置 IIS 身份验证。

3.

(可选)配置客户端证书映射(如果使用证书身份验证的话)。

有关客户端证书映射的详细信息,请参见 Microsoft 知识库文章 Q313070“How To:Configure Client Certificate Mappings in Internet Information Services (IIS) 5.0”。

4.

设置文件和文件夹的 NTFS 权限。IIS 和 ASP.NET FileAuthorizationModule 共同检查已验证用户(或匿名 Internet 用户帐户)是否具有访问所请求文件的必要权限(根据 ACL 设置)。

配置 ASP.NET 设置

应用程序级别配置设置保存在 Web.config 文件中,这些文件位于应用程序的虚拟根目录或者(可选)其他子文件夹中(这些设置有时可以覆盖父文件夹设置)。

1.

配置身份验证。应该在应用程序虚拟根目录下的 Web.config 文件中基于每个应用程序对它进行设置(而不是在 Machine.config 中)。

<authentication mode="Windows|Forms|Passport|None" />

2.

配置模拟。默认情况下,ASP.NET 应用程序不使用模拟。应用程序使用配置的 ASP.NET 进程标识(通常为 ASPNET)运行,并且应用程序执行的所有资源访问都使用此标识。仅在以下情况下需要使用模拟:

您使用 Enterprise Services,并且要使用 Enterprise Services (COM+) 角色授权访问服务组件所提供的功能。

将 IIS 配置为使用匿名身份验证,而且要使用匿名 Internet 用户帐户进行资源访问。有关此方法的详细信息,请参见本章后面的“访问网络资源”。

您需要将已验证用户的安全性上下文传递到下一层(例如数据库)。

您已将传统的 ASP 应用程序移植到 ASP.NET,并且需要同样的模拟行为。默认情况下,传统 ASP 模拟调用者。

要配置 ASP.NET 模拟,请在应用程序的 Web.config 中使用下面的 <identity> 元素。

<identity impersonate="true" />

3.

配置授权。URL 授权确定用户或角色是否可以将特定的 HTTP 谓词(例如,GET、HEAD 和 POST)发送给特定的文件。要实现 URL 授权,请执行以下任务。

1.

将 <authorization> 元素添加到应用程序虚拟根目录下的 Web.config 文件中。

2.

使用 allowdeny 属性限制对用户和角色的访问。下面的示例摘自 Web.config,它使用 Windows 身份验证并允许 Bob 和 Mary 访问,但拒绝其他人访问。

<authorization>
  <allow users="DomainName\Bob, DomainName\Mary" />
  <deny users="*" />
</authorization>

重要 您需要在 <authorization> 元素的结尾添加 <denyusers="?"> 或 <denyusers="*">,否则将给所有已验证的标识授予访问权限。

URL 授权注意事项

在配置 URL 授权时,请注意以下几点:

"*" 指所有标识。

"?" 指未通过身份验证的标识(即匿名标识)。

要使 URL 授权能够正常工作,并不需要进行模拟。

Web.config 中的授权设置通常适用于当前目录和所有子目录中的所有文件(除非子目录包含它自己的 Web.config,并且该文件包含 <authorization> 元素。在这种情况下,子目录中的设置覆盖父目录的设置)。

URL 授权只适用于由 IIS 映射到 ASP.NET ISAPI (spnet_isapi.dll) 的文件类型。

可以使用 <location> 标记将授权设置应用于个别文件或目录。下面的示例显示了如何将授权应用于特定的文件 (Page.aspx)。

<location path="page.aspx" />
  <authorization>
    <allow users="DomainName\Bob, DomainName\Mary" />
    <deny users="*" />
  </authorization>
</location>

用于 URL 授权的用户和角色是由身份验证设置决定的:

如果设置了 <authenticationmode="Windows" >,则给 Windows 用户和组帐户授予访问权限。 用户名采用“DomainName\WindowsUserName”格式 角色名采用“DomainName\WindowsGroupName”格式

本地管理员组称为“BUILTIN\Administrators”。本地用户组称为“BUILTIN\Users”。

如果设置了 <authenticationmode="Forms" >,则根据存储在当前 HTTP 上下文中的 IPrincipal 对象的用户和角色进行授权。例如,如果使用窗体身份验证根据数据库验证用户的身份,则根据从数据库中检索的角色进行授权。

如果设置了 <authenticationmode="Passport" >,则根据从存储中检索的 Passport User ID (PUID) 或角色进行授权。例如,可以将 PUID 映射到特定的帐户和在 SQL Server 数据库或 Active Directory 中存储的一组角色。

此功能被内置到 Microsoft Windows .NET Server 2003 操作系统中。

如果设置了 <authenticationmode="None" >,则不能执行授权。"None" 指定您不想执行任何身份验证,或者不想使用任何 .NET 身份验证模块,而是使用自己的自定义机制。

但是,如果使用自定义身份验证,则应创建具有角色的 IPrincipal 对象,并将其存储到 HttpContext.User 中。在随后执行 URL 授权时,将根据 IPrincipal 对象中保存的用户和角色(无论以何种方式检索它们)执行授权。

URL 授权示例

以下列表列出了一些典型 URL 授权示例的语法:

拒绝匿名帐户访问

<deny users="?" />

拒绝所有用户访问

<deny users="*"/>

拒绝 Manager 角色访问

<deny roles="Manager"/>

窗体身份验证示例

<configuration>
  <system.web>
      <authentication mode="Forms">
        <forms name=".ASPXUSERDEMO" 
               loginUrl="login.aspx" 
               protection="All" timeout="60" />
      </authentication>
      <authorization>
        <deny users="jdoe@somewhere.com" />
        <deny users="?" />
      </authorization>
  </system.web>
</configuration>

<authorization> 元素可用于存储在 HttpContext.User 中的当前 IPrincipal 对象,也可用于存储在 HttpContext.Request.RequestType 中的 HTTP 数据传输方法。

保护资源

1.

使用 Windows ACL 保护资源,包括文件、文件夹和注册表项。

如果不使用模拟,则应用程序需要访问的任何资源的 ACL 必须授予 ASP.NET 进程帐户至少“读”访问权限。

如果使用模拟,文件和注册表项的 ACL 必须授予已验证用户(或匿名 Internet 用户帐户,如果匿名身份验证生效的话)至少“读”访问权限。

2.

保护 Web.config 和 Machine.config:

使用正确的 ACL。如果 ASP.NET 使用模拟,则模拟的标识需要“读”访问权限。否则,ASP.NET 进行标识需要“读”访问权限。对 Web.config 的 Machine.config 使用以下 ACL。

系统:完全控制

管理员:完全控制

进程标识或模拟的标识:读

如果没有模拟匿名 Internet 用户帐户 (IUSR_MACHINE),则应该拒绝该帐户的访问。

如果将应用程序映射到 UNC 共享,则 UNC 标识也需要读取配置文件的访问权限。

删除不需要的 HTTP 模拟。Machine.config 包含一组默认的 HTTP 模拟(在 <httpModules> 元素内)。它们是:

WindowsAuthenticationModule

FormsAuthenticationModule

PassportAuthenticationModule

UrlAuthorizationModule

FileAuthorizationModule

OutputCacheModule

SessionStateModule

如果应用程序没有使用特定的模拟,请将其删除,以免将来在应用程序中出现与该模拟有关的任何潜在的安全问题。

3.

(可选)将 <location> 元素与

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ...  下一页 >> 

打印本文 打印本文 关闭窗口 关闭窗口