c#2005net30高级编程(第5版)第19章NET的安全性.docx
《c#2005net30高级编程(第5版)第19章NET的安全性.docx》由会员分享,可在线阅读,更多相关《c#2005net30高级编程(第5版)第19章NET的安全性.docx(45页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、. NET的安全性当用户坐在计算机前,单击应用程序上的按钮时,应用程序会在后台作出响应,如果 用户试图使用个没有相关模块的特性,应用程序就会与Internet连接,把模块下载到全 局程序集缓存中,并开始执行模块,所有的一切都没有给出提示。这种后台升级功能已经在许多.NET应用程序中使用了,但是,我们必须关注与所谓的 “移动代码(mobile code)”相关的安全问题。也就是说,有什么证据能说明计算机下载的 代码是可以信任的?怎样知道所下载的模块就是我们需要的模块? CLR在后台做了什么 工作,以确保Web站点上的控件没有读取私人的电子邮件?.NET执行程序集的安全性策略。.NET根据它拥有的
2、程序集信息(例如程序集来自哪里, 它们是由谁发布的),把具有相似特征的程序集组合在起。例如,运行库把本地内联网h 的所有代码放在组。然后,使用安全性策略(通常由系统管理员使用代码访问安全策略 具caspol.exe命令行实用程序或Microsoft管理控制台来定义)在非常小的粒度级别上决定应 该赋予代码什么权限。需要做什么工作才能确保机器或某个应用程序的安全?什么也不需 要,因为所有的代码都自动运行在CLR的安全环境中,但可以在必要时禁用安全性。除了相信正在执行的代码是可信赖的之外,还要允许应用程序的用户访问他们需要的 特性(但不要太多),这一点也是非常重要的。依靠基于角色的安全性,.NET可
3、以对用户和 角色进行有效的管理。本章将讨论.NET中有助于管理安全的一些特性,其中包括.NET怎样避开有害的代码、 怎样管理安全性策略,以及怎样编程访问安全子系统等。除此之外,还将讨论怎样安全地 部署.NET应用程序,并且给出些小的应用程序示例,以巩固本章介绍的概念。19.1 代码访问的安全性代码访问的安全性是.NET的个特性,它根据代码的信任级别来管理代码。如果CLR 非常信赖代码,允许它们运行,就会开始执行代码。但是,根据提供给程序集的权限,代 码也许要在有限制的环境中运行。如果代码没有得到足够的信赖去运行,或者虽然代码运 行了,但试图执行没有相关权限的操作,则会产生一个安全异常(其类型是
4、SecurityException 或它的子类)。代码访问的安全性系统意味着可以停止有害代码的运行,也可以允许代码运 行在受保护的环境中,在受保护的环境中,我们相信代码不会进行破坏。例如,如果用户试图运行个应用程序,执行从!nternet上下载的代码,则默认的安 全性策略将生成一个异常,该应用程序会启动失败。同样,如果用户从网络驱动器上运行 应用程序,则那个应用程序可以运行,但是如果那个应用程序试图访问本地驱动器上的文 件,运行库就会产生一个异常,根据应用程序中处理错误的程序,应用程序会退出对文 件的访问,或者退出执行。对于大多数应用程序而言,.NET代码访问的安全性都是非常有用的,但它在后台
5、起作 用。代码访问的安全性提供了高水平的保护,以远离有害的代码,但是,通常我们涉及不 到这个方面。而只考虑安全性策略的管理,尤其是在把桌面应用程序配置为信赖提供应用 程序的软件厂商的代码时,就更要考虑安全性策略的管理。在开发应用程序时,对于其中包含的元素,如果要严密地控制它们的安全性,则可以 使用代码访问的安全性。例如,如果公司的数据库中包含极其机密的数据,则可以使用代 码访问的安全性,规定什么代码允许访问数据库,而什么代码不允许访问数据库。代码访问的安全性的主要目的是保护资源(例如本地磁盘、网络和用户接口等)免受有 害代码的破坏,而不是使软件免受用户的破坏。对于与用户相关的安全问题,通常可以
6、使 用Windows内置的用户安全子系统,或者利用.NET中基于角色的安全性,这些内容将在 本章的后面讨论。代码访问的安全性以两个高层次的概念为基础,即代码组(Code Group)和权限 (Permission)下面讨论这两个概念,因为它们构成了后面章节的基础:代码组:代码组用于把具有相似特征的代码集合到组。通常,集合时所依据的 最重要特征就是代码来自哪里。例如,代码组包括“ Interne(代码来自!nternet) 和“ 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 使用 !nternet Explorer中的安全选项可以对这些区域进行管理,后面在讨论怎样管理安全性策略时,再 讨论这些内容。虽然设置是在Internet Explorer中管理的,但是它们将应用于整个机器。很 明显,那些配置选项在非Microsoft浏览器中是不能使用的,实际上,使用.NET Framework 编写的页面控件只能在Internet Explorer上工
11、作。代码组的安排是层次状的,根部是All Code成员条件,如图9-1所示。从这个图中可 以看出,每个代码组都有一个成员条件,并且指定赋予代码组的权限。注意,如果程序 集不符合代码组中的成员条件,则CLR不会给它匹配那个代码组下面的代码组。图 19-11 .Caspol.exe代码访问安全性策略工具本章将花大量的篇幅介绍命令行工具:代码访问安全性策略工具。要得到它的选项列 表,只需输入下面的命令:caspol.exe ?使用下面的命令把输出发送给个文本文件:caspol.exe output.txt.NET也包括个Microsoft Management Console管理单元,它用于管理代码
12、访问的安 全性。但是,这里只使用命令行实用程序caspol.exe,以易于理解本章的示例,还可以创建 脚本,更改安全性策略,在把策略应用到大量的机器上时,这是非常有用的。使用caspol.exe, uj以查看机器上的代码组。caspol.exe的执行结果是列出机器上代码 组的层次结构,并描述每个代码组。健入如下命令:caspol.exe -listdescription另外,Jistdescription选项还有一个缩写方式:ld。下面是该命令的结果:Microsoft (R) .NET Framework CasPol 2.0.50215.44Copyright (C) Microsoft
13、Corporation. 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
14、 the 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 fr
15、om the 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
16、.1.2.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.
17、1.3.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 s
18、et grants 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 ONEx
20、ecution checking is ONPolicy change prompt is ONLevel = MachineCode Groups:1. All code: Nothing1.1. Zone - MyComputer: FullTrust1.1.1. StrongName -002400000480000094000000060200000024000052534131000400000100010007D1FA57C4A ED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD2 3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c# 2005 net30 高级 编程 19 NET 安全性
限制150内