转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
ASP.NET 安全性         ★★★★

ASP.NET 安全性

作者:闵涛 文章来源:闵涛的学习笔记 点击数:6754 更新时间:2009/4/23 10:44:53
allowOverride="false" 属性一起使用以锁定配置设置,如下所示。

锁定配置设置

配置设置是分层的。子目录中的 Web.config 文件设置覆盖父目录中的 Web.config 设置。另外,Web.config 设置覆盖 Machine.config 设置。

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

<location path="somepath" allowOverride="false" />
 . . . arbitrary configuration settings . . .
</location>

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

在 machine.config 的上下文中,路径必须为全资格的,并且包含 Web 站点、虚拟目录名称和(可选)一个子目录和文件名。例如:

<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.

单击 OK 关闭“添加/编辑应用程序扩展映射”对话框。

9.

单击 OK 关闭“应用程序配置”对话框,然后再单击 OK 关闭“属性”对话框。

2.

在 Web.config 中,为指定的文件类型添加 <HttpHandler> 映射。

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

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

安全通信

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

更多信息

有关使用 SSL 保护数据库服务器链路的信息,请参见“How To Use SSL to Secure Communication with SQL Server 2000”。

有关在两台计算机之间使用 IPSec 的信息,请参见“How To Use IPSec to Provide Secure Communication Between Two Servers”。

返回页首返回页首

编程安全性

在确定 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 数据库中的详细信息,请参见“数据访问安全性”一章中的“对数据库进行用户身份验证”。

将用户放到角色中

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

创建一个 IPrincipal 对象

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

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

如果使用的是窗体、Passport 或自定义身份验证,则必须在 Global.asax 的 Application_AuthenticateRequest 事件处理程序中编写代码以创建 IPrincipal 对象。GenericPrincipal 类是由 .NET 框架提供的,在大多数情况下应该使用此类。

将 IPrincipal 对象放到当前 HTTP 上下文中

IPrincipal 对象附加到当前 HTTP 上下文中(使用 HttpContext.User 变量)。如果使用 Windows 身份验证,则 ASP.NET 自动完成此任务。否则,您必须手动附加该对象。

基于用户标识和/或角色成员身份进行授权

如果应用程序需要更细分的授权逻辑,请在代码中以声明方式(获取类或方法级授权)或命令性方式使用 .NET 角色。

可以使用声明性或命令性主体权限要求(使用 PrincipalPermission 类),也 可以通过调用 IPrincipal.IsInRole() 方法执行明确的角色检查。

以下示例采用 Windows 身份验证并显示了声明性主体权限要求。仅当已验证用户是 Manager Windows 组的成员时,才执行该属性后面的方法。如果调用者不是该组的成员,就会发生 SecurityException

[PrincipalPermission(SecurityAction.Demand, 
                     Role=@"DomainName\Manager")]
public void SomeMethod()
{
}

以下示例显示代码中的明确角色检查。该示例采用 Windows 身份验证。如果使用非 Windows 身份验证机制,则代码基本上是一样的。只是将 User 对象转换成 WindowsPrincipal 对象,而不是 GenericPrincipal 对象。

// Extract the authenticated user from the current HTTP context.
// The User variable is equivalent to HttpContext.Current.User if you are using // an .aspx or .asmx page
WindowsPrincipal authenticatedUser = User as WindowsPrincipal;
if (null != authenticatedUser)
{
  // Note: To retrieve the authenticated user''''s username, use the 
  // following line of code
  // string username = authenticatedUser.Identity.Name;

  // Perform a role check
  if (authenticatedUser.IsInRole(@"DomainName\Manager") )
  {
    // User is authorized to perform manager functionality
  }
}
else
{
  // User is not authorized to perform manager functionality
}

更多信息

有关以上窗体身份验证模式的实现实现,请参见本章后面的“窗体身份验证”部分。

创建自定义的 IPrincipal 类

当您使用非 Windows 身份验证机制时,大多数情况下应使用 .NET 框架提供的 GenericPrincipal 类。它使用 IPrincipal.IsInRole 方法提供角色检查。

有时,您可能需要实现自己的 IPrincipal 类。实现您自己的 IPrincipal 的原因有:

您想扩展角色检查功能。您可能需要一些方法来使您能够检查某个特定用户是否是一个多角色成员。例如:

CustomPrincipal.IsInAllRoles( "Role", "Role2", "Role3" )
CustomPrincipal.IsInAnyRole( "Role1", "Role2", "Role3" )

您可能需要实现一个额外的方法或属性,以数组形式返回角色列表。例如:

string[] roles = CustomPrincipal.Roles;

您想让应用程序强制实施角色分级逻辑。例如,高级管理员被认为在层次结构中高于普通管理员。可以用类似下面所示的方法进行测试。

CustomPrincipal.IsInHigherRole("Manager");
CustomPrincipal.IsInLowerRole("Manager");

您可能需要实现惰性的角色列表初始化。例如,只有在需要进行角色检查时,才能动态加载角色列表。 您可能需要实现 IIdentity 接口以使用 X509ClientCertificate 标识的用户。例如:

CustomIdentity id = CustomPrincipal.Identity;
X509ClientCertificate cert = id.ClientCertificate;

更多信息

有关创建您自己的 IPrincipal 类的详细信息,请参见“How To Implement IPrincipal”。

返回页首

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


[C语言系列]NET 中C#的switch语句的语法  [系统软件]托拽Explore中的文件到VB.net的窗口
[系统软件]Boost库在XP+Visual C++.net中的安装  [常用软件]新配色面板:Paint.Net3.0RC1官方下载
[常用软件]用内建的“Net Meeting”聊天  [VB.NET程序]Henry的VB.NET之旅(三)—共享成员
[VB.NET程序]Henry的VB.NET之旅(二)—构造与析构  [VB.NET程序]Henry的VB.NET之旅(一)—失踪的窗体
[VB.NET程序]在托盘上显示Balloon Tooltip(VB.NET)  [VB.NET程序]Henry手记-VB.NET中动态加载Treeview节点(二)
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台