c#2005net3.0高级编程(第5版)第19章, NET的安全性.docx
《c#2005net3.0高级编程(第5版)第19章, NET的安全性.docx》由会员分享,可在线阅读,更多相关《c#2005net3.0高级编程(第5版)第19章, NET的安全性.docx(47页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第1 章. NET的安全性当用户坐在计算机前,单击应用程序上的按钮时,应用程序会在后台作出响应,如果 用户试图使用一个没有相关模块的特性,应用程序就会与Internet连接,把模块下载到全 局程序集缓存中,并开始执行模块,所有的一切都没有给出提示。这种后台升级功能已经在许多.NET应用程序中使用了,但是,我们必须关注与所谓的 “移动代码(mobile code)”相关的安全问题。也就是说,有什么证据能说明计算机下载的 代码是可以信任的?怎样知道所下载的模块就是我们需要的模块? CLR在后台做了什么 工作,以确保Web站点上的控件没有读取私人的电子邮件?.NET执行程序集的安全性策略。.NET根
2、据它拥有的程序集信息(例如程序集来自哪里, 它们是由谁发布的),把具有相似特征的程序集组合在起。例如,运行库把本地内联网上 的所有代码放在组。然后,使用安全性策略(通常由系统管理员使用代码访问安全策略 具caspol.exe命令行实用程序或Microsoft管理控制台来定义)在非常小的粒度级别上决定应 该赋予代码什么权限。需要做什么工作才能确保机器或某个应用程序的安全?什么也不需 要,因为所有的代码都自动运行在CLR的安全环境中,但可以在必要时禁用安全性。除了相信正在执行的代码是可信赖的之外,还要允许应用程序的用户访问他们需要的 特性(但不要太多),这一点也是非常重要的。依靠基于角色的安全性,
3、.NET可以对用户和 角色进行有效的管理。本章将讨论.NET中有助于管理安全的些特性,其中包括.NET怎样避开有害的代码、 怎样管理安全性策略,以及怎样编程访问安全子系统等。除此之外,还将讨论怎样安全地 部署.NET应用程序,并且给出些小的应用程序示例,以巩固本章介绍的概念。19.1 代码访问的安全性代码访问的安全性是.NET的个特性,它根据代码的信任级别来管理代码。如果CLR 非常信赖代码,允许它们运行,就会开始执行代码。但是,根据提供给程序集的权限,代 码也许要在有限制的环境中运行。如果代码没有得到足够的信赖去运行,或者虽然代码运 行了,但试图执行没有相关权限的操作,则会产生一个安全异常(
4、其类型是SecurityException 或它的子类)。代码访问的安全性系统意味着可以停止有害代码的运行,也可以允许代码运行在受保护的环境中,在受保护的环境中,我们相信代码不会进行破坏。例如,如果用户试图运行个应用程序,执行从!nternet上下载的代码,则默认的安 全性策略将生成一个异常,该应用程序会启动失败。同样,如果用户从网络驱动器上运行 应用程序,则那个应用程序可以运行,但是如果那个应用程序试图访问本地驱动器上的文 件,运行库就会产生一个异常,根据应用程序中处理错误的程序,应用程序会退出对文 件的访问,或者退出执行。対于大多数应用程序而言,.NET代码访问的安全性都是非常有用的,但它
5、在后台起作 用。代码访问的安全性提供了高水平的保护,以远离有害的代码,但是,通常我们涉及不 到这个方面。而只考虑安全性策略的管理,尤其是在把桌面应用程序配置为信赖提供应用 程序的软件厂商的代码时,就更要考虑安全性策略的管理。在开发应用程序时,对于其中包含的元素,如果要严密地控制它们的安全性,则可以 使用代码访问的安全性。例如,如果公司的数据库中包含极其机密的数据,则可以使用代 码访问的安全性,规定什么代码允许访问数据库,而什么代码不允许访问数据库。代码访问的安全性的主要目的是保护资源(例如本地磁盘、网络和用户接口等)免受有 害代码的破坏,而不是使软件免受用户的破坏。対于与用户相关的安全问题,通
6、常可以使 用Windows内置的用户安全子系统,或者利用.NET中基于角色的安全性,这些内容将在 本章的后面讨论。代码访问的安全性以两个高层次的概念为基础,即代码组(Code Group)和权限 (Permission)。下面讨论这两个概念,因为它们构成了后面章节的基础:代码组:代码组用于把具有相似特征的代码集合到组。通常,集合时所依据的 最重要特征就是代码来自哪里。例如,代码组包括“ Interne(代码来自Internet) 和“ Intrane(代码来自LAN)。把程序集放到代码组中所使用的信息称为“证据”。 CLR收集的其他证据包括代码的发布者、代码的强名以及下载代码的URI等。代 码
7、组的排列是层次状的,程序集总是与几个代码组相匹配。层次根部的代码组称为 “All Code”,包含其他所有的代码组。层次用于确定程序集属于哪个代码组,如 果程序集提供的证据与树中的代码组不匹配,则程序集不属于树的任何个代码组。权限:权限是允许每个代码组执行的动作。例如,权限包括“可以访问用户界 面”和“可以访问本地存储器”等。系统管理员通常在Enterprise级、Machine 级和User级上管理权限。CLR 中的 Virtual Execution System 用于载入和运行程序。Virtual Execution System 提 供了执行托管代码所需要的功能,并使用程序集元数据把模
8、块在运行期间连接在起。当 VES载入程序集时,VES通常把程序集与一个或多个代码组相匹配。每个代码组都被赋 予了一个或多个权限,指定各个代码组中的程序集可以执行什么动作。例如,如果 MyComputer代码组被赋予FilelOPermission权限,则意味着来自本地机器的程序集可以读 写本地文件系统。19.1.1 代码组代码组有一个称之为成员条件的入口需求(entry requirement)如果要把程序集划归某个代码组,该程序集就必须符合那个代码组的成员条件。例如,成员条件可以是“程序集 来自http:站点”或“这个软件的发布者是Microsoft公司”等。每个代码组都有一个并且只有一个成
9、员条件。在.NET中,代码组可以使用的成员 条件如下: Zone:代码来自的区域 Site:代码来自的Web站点 Strong name:代码唯一的、可验证的名称。强名详见第16章。 Publisher:代码发布者 URL:代码来自的具体位置 Hash value:程序集的散列值 Skip verification:请求Skip verification的代码避开代码验证检查。代码的验证可以 确保代码以定义合理和可接受的方式访问类型。运行库不能确保类型不安全的代 码是安全的。 Application directory:程序集在应用程序中的位置 All code :符合条件的所有代码 Cust
10、om:与用户相关的条件上述成员条件的第一个类型就是Zone,这个类型是最常用的。Zone是一段代码区域 的开端,表示下面的内容:MyComputer, Internet, Intranet, Trusted 或 Untrusted。使用 Internet Explorer中的安全选项可以对这些区域进行管理,后面在讨论怎样管理安全性策略时,再 讨论这些内容。虽然设置是在Internet Explorer中管理的,但是它们将应用于整个机器。很 明显,那些配置选项在非Microsof1浏览器中是不能使用的,实际上,使用.NET Framework 编写的页面控件只能在Internet Explore
11、r上工作。代码组的安排是层次状的,根部是All Code成员条件,如图19-1所示。从这个图中可 以看出,每一个代码组都有一个成员条件,并且指定赋予代码组的权限。注意,如果程序 集不符合代码组中的成员条件,则CLR不会给它匹配那个代码组面的代码组。1. Caspol.exe代码访问安全性策略工具本章将花大量的篇幅介绍命令行工具:代码访问安全性策略工具。要得到它的选项列 表,只需输入下面的命令:caspol.exe ?使用下面的命令把输出发送给个文本文件:caspol.exe output.txt.NET也包括个Microsoft Management Console管理单元,它用于管理代码访问
12、的安 全性。但是,这里只使用命令行实用程序caspol.exe,以易于理解本章的示例,还可以创建 脚本,更改安全性策略,在把策略应用到大量的机器上时,这是非常有用的。使用caspol.exe,可以查看机器上的代码组。caspol.exe的执行结果是列出机器上代码 组的层次结构,并描述每个代码组。键入如下命令:caspol.exe -listdescription另外,Jistdescription选项还有一个缩写方式:ld。下面是该命令的结果:Microsoft (R) .NET Framework CasPol 2.0.50215.44Copyright (C) Microsoft Corp
13、oration. All rights reserved.Security is ONExecution checking is ONPolicy change prompt is ONLevel = MachineFull Trust Assemblies:1. All_Code: Code group grants no permissions and forms the root of the code group tree.1.1. My_Computer_Zone: Code group grants full trust to all code originating on the
14、 local computer1.1.1. Microsoft_Strong_Name: Code group grants full trust to code signed with the Microsoft strong name.1.1.2. ECMA_Strong_Name: Code group grants full trust to code signed with the ECMA strong name.1.2. LocalIntranet_Zone: Code group grants the intranet permission set to code from t
15、he intranet zone. This permission set grants intranet code the right to use isolated storage, full UI access, some capability to do reflection, and limited access to environment variables.1.2.1. Intranet_Same_Site_Access: All intranet code gets the right to connect back to the site of its origin.1.2
16、.2. Intranet_Same_Directory_Access: All intranet code gets the right to read from its install directory.1.3. Internet_Zone: Code group grants code from the Internet zone the Internet permission set. This permission set grants Internet code the right to use isolated storage and limited UI access.1.3.
17、1. Internet_Same_Site_Access: All Internet code gets the right to connect back to the site of its origin.1.4. Restricted_Zone: Code coming from a restricted zone does not receive any permissions.1.5. Trusted_Zone: Code from a trusted zone is granted the Internet permission set. This permission set g
18、rants the right to use isolated storage and limited UI access.1.5.1. Trusted_Same_Site_Access: All Trusted Code gets the right to connect back to the site of its origin.Success.NET安全子系统确保每一个代码组中的代码只能做某些事情。例如,Internet区域中 的代码在默认状态下比本地驱动器中的代码有更严格的限制;本地驱动器中的代码通常有 访问本地磁盘上数据的权限,但是!nternet中的程序集在默认状态下就没有这个权
19、限。使用caspol.exe和它在Microsoft Management Console中的等价选项,可以为每个代 码访问组指定信任级别,还可以按照更小的粒度方式管理代码组和权限。再看看代码访问组,但是,这次的信息比上次要少些。确保以本地管理员身份登录 后,打开命令提示窗口,输入下面的命令:caspol.exe -listgroups得到如下信息:Microsoft (R) .NET Framework CasPol 2.0.50215.44Copyright (C) Microsoft Corporation. All rights reserved.Security is ONExecu
20、tion checking is ONPolicy change prompt is ONLevel = MachineCode Groups:1. All code: Nothing1.1. Zone - MyComputer: FullTrust1.1.1. StrongName -002400000480000094000000060200000024000052534131000400000100010007D1FA57C4A ED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD2 3613
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c#2005net3.0高级编程第5版第19章 NET的安全性 c# 2005 net3 高级 编程 19 NET 安全性
限制150内