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

📄 。net安全性.txt

📁 asp.net 安全设计方案
💻 TXT
📖 第 1 页 / 共 5 页
字号:
 
3.
 配置授权。URL 授权确定用户或角色是否可以将特定的 HTTP 谓词(例如,GET、HEAD 和 POST)发送给特定的文件。若要实现 URL 授权,请执行以下任务。

1.
 将 <authorization> 元素添加到应用程序虚拟根目录下的 Web.config 文件中。
 
2.
 使用 allow 和 deny 属性限制对用户和角色的访问。下面的示例出自 Web.config,它使用 Windows 身份验证并允许 Bob 和 Mary 的访问,但拒绝其他人的访问。

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

重要说明:您需要在 <authorization> 元素的结尾添加 <deny users="?"/> 或 <deny users="*"/>,否则将给所有已进行身份验证的标识授予访问权限。
 
 

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

? "*" 指所有标识。
 
? "?" 指未经过身份验证的标识(即匿名标识)。
 
? 要使 URL 授权能够正常工作,并不需要进行模拟。
 
? Web.config 中的授权设置通常适用于当前目录和所有子目录中的所有文件(除非子目录包含它自己的 Web.config,并且该文件包含 <authorization> 元素。在这种情况下,子目录中的设置会取代父目录的设置)。 

注意:URL 授权只适用于由 IIS 映射到 ASP.NET ISAPI 扩展 (aspnet_isapi.dll) 的文件类型。

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

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

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

? 如果设置了 <authentication mode="Windows" />,则给 Windows 用户和组帐户授予访问权限。 

用户名采用“DomainName\WindowsUserName”的格式

角色名采用“DomainName\WindowsGroupName”的格式

注意:本地管理员组称为“BUILTIN\Administrators”。本地用户组称为“BUILTIN\Users”。
 
? 如果设置了 <authentication mode="Forms" />,则根据存储在当前 HTTP 上下文中的 IPrincipal 对象的用户和角色进行授权。例如,如果使用窗体身份验证根据数据库对用户进行身份验证,则根据从数据库中检索的角色进行授权。
 
? 如果设置了 <authentication mode="Passport" />,则根据从存储中检索的 Passport 用户 ID (PUID) 或角色进行授权。例如,可以将 PUID 映射到特定的帐户和在 SQL Server 数据库或 Active Directory 中存储的一组角色。

注意:此功能将被内置到 Microsoft Windows .NET Server 2003 操作系统中。
 
? 如果设置了 <authentication mode="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> 元素与 allowOverride="false" 属性一起使用以锁定配置设置(如下所示)。
 

锁定配置设置
配置设置是按层级的。子目录中的 Web.config 文件设置取代父目录中的 Web.config 设置。另外,Web.config 设置取代 Machine.config 设置。

通过将 <location> 元素与 allowOverride 属性一起使用,可以锁定配置设置以防止它们被低级别的设置取代。例如:

<location path="somepath" allowOverride="false" />
 . . . 任意配置设置. . .
</location>

请注意,路径可以指 Web 站点或虚拟目录,并且它适用于指定的目录和所有子目录。如果将 allowOverride 设置为 false,则可以防止任何低级别的配置文件取代 <location> 元素中指定的设置。锁定配置设置的功能适用于所有设置类型,而不是仅限于安全设置(如身份验证模式)。

在 machine.config 的上下文中,路径必须是全限定路径,并且包括网站、虚拟目录名以及可选的子目录和文件名。例如:

<location path="Web Site Name/VDirName/SubDirName/PageName.aspx" >
 . . .
</location>

在 web.config 的上下文中,路径是相对于应用程序的虚拟目录的相对路径。例如:

<location path="SubDirName/PageName.aspx" >
. . .
</location>
禁止下载文件
可以使用 HttpForbiddenHandler 类禁止通过 Web 下载某些文件类型。该类由 ASP.NET 在内部使用以禁止下载某些系统级别文件(例如,包括 web.config 在内的配置文件)。有关可用这种方法进行限制的文件类型的完整列表,请参见 machine.config 中的 <httpHandlers> 部分。

对于应用程序在内部使用但不能进行下载的文件,应考虑使用 HttpForbiddenHandler。 

注意:还必须使用 Windows ACL 来保护文件的安全,控制哪些用户在登录到 Web 服务器时可以访问这些文件。

? 使用 HttpForbiddenHandler 禁止下载特定的文件类型

1.
 在 IIS 中为指定的文件类型创建应用程序映射,以便将其映射到 Aspnet_isapi.dll。

1.
 在任务栏上,依次单击“开始”按钮、“程序”、“管理工具”,然后选择“Internet 信息服务”。
 
2.
 选择应用程序的虚拟目录,右键单击,然后单击“属性”。
 
3.
 选择“应用程序设置”,然后单击“配置”。
 
4.
 单击“添加”以创建新的应用程序映射。
 
5.
 单击“浏览”,然后选择 
c:\winnt\Microsoft.NET\Framework\v1.0.3705\aspnet_isapi.dll。
 
6.
 在“扩展名”字段中输入要禁止下载的文件类型的文件扩展名(例如 .abc)。
 
7.
 确保选中“所有谓词”和“脚本引擎”,并且没有选中“检查文件是否存在”。
 
8.
 单击“确定”关闭“添加/编辑应用程序扩展映射”对话框。
 
9.
 单击“确定”关闭“应用程序配置”对话框,然后再单击“确定”关闭“属性”对话框。
 
 
2.
 在 Web.config 中,为指定的文件类型添加 <HttpHandler> 映射。

下面显示了一个 .abc 文件类型的示例。

<httpHandlers>
  <add verb="*" path="*.abc" 
    type="System.Web.HttpForbiddenHandler"/>
</httpHandlers>

 
 

安全通信
结合使用 SSL 和 Internet 协议安全性 (IPSec) 以保护通信链路的安全。

更多信息
? 有关使用 SSL 保护数据库服务器链路安全的信息,请参见如何使用 SSL 来确保与 SQL Server 2000 安全通信。
 
? 有关在两台计算机之间使用 IPSec 的信息,请参见如何使用 IPSec 在两个服务器之间进行安全通信。
 

返回页首
编程安全性
在确定 Web 应用程序可配置的安全设置后,您需要以编程方式进一步改进和优化应用程序的授权策略。这包括在程序集中使用声明方式的 .NET 属性,以及在代码中执行强制方式的授权检查。 

本节重点介绍在 ASP.NET Web 应用程序中执行授权所需的主要编程步骤。

授权模式
下面总结了在 Web 应用程序中对用户进行授权的基本模式:

1.
 检索凭据
 
2.
 验证凭据
 
3.
 将用户放到角色中
 
4.
 创建一个 IPrincipal 对象
 
5.
 将 IPrincipal 对象放到当前的 HTTP 上下文中
 
6.
 基于用户标识/角色成员身份进行授权
 

重要说明:如果配置了 Windows 身份验证,则 ASP.NET 自动执行第 1 步到第 5 步。对于其他身份验证机制(窗体、Passport 和自定义方法),您必须编写代码以执行这些步骤(如下所示)。

检索凭据
首先,必须从用户检索一组凭据(用户名和密码)开始。如果应用程序没有使用 Windows 身份验证,则需要确保使用 SSL 在网络上正确保护明文凭据。 

验证凭据
如果配置了 Windows 身份验证,则操作系统的基本服务就会自动对凭据进行验证。

如果使用其他身份验证机制,则必须编写代码以根据数据存储(如 SQL Server 数据库或 Active Directory)对凭据进行验证。 

有关如何将用户凭据安全地存储在 SQL Server 数据库中的详细信息,请参见第 12 章数据访问安全性中的为数据库验证用户身份。

将用户放到角色中
用户数据存储还应包含每个用户的角色列表。必须编写代码以检索已验证用户的角色列表。

创建一个 IPrincipal 对象
授权是针对已进行身份验证的用户进行的,这些用户的标识和角色列表保存在 IPrincipal 对象中(该对象在当前 Web 请求的上下文中传递)。

如果配置了 Windows 身份验证,则 ASP.NET 自动构造 WindowsPrincipal 对象。该对象包含已进行身份验证的用户的标识以及角色列表(它等同于用户所属的 Windows 组列表)。

⌨️ 快捷键说明

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