c#2005net30高级编程(第5版)第19章NET的安全性.doc
《c#2005net30高级编程(第5版)第19章NET的安全性.doc》由会员分享,可在线阅读,更多相关《c#2005net30高级编程(第5版)第19章NET的安全性.doc(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第19章 .NET的安全性190第 章 .NET的安全性当用户坐在计算机前,单击应用程序上的按钮时,应用程序会在后台作出响应,如果用户试图使用一个没有相关模块的特性,应用程序就会与Internet连接,把模块下载到全局程序集缓存中,并开始执行模块,所有的一切都没有给出提示。这种后台升级功能已经在许多.NET应用程序中使用了,但是,我们必须关注与所谓的“移动代码(mobile code)”相关的安全问题。也就是说,有什么证据能说明计算机下载的代码是可以信任的?怎样知道所下载的模块就是我们需要的模块?CLR在后台做了什么工作,以确保Web 站点上的控件没有读取私人的电子邮件?.NET执行程序集的安
2、全性策略。.NET根据它拥有的程序集信息(例如程序集来自哪里,它们是由谁发布的),把具有相似特征的程序集组合在一起。例如,运行库把本地内联网上的所有代码放在一组。然后,使用安全性策略(通常由系统管理员使用代码访问安全策略工具caspol.exe命令行实用程序或Microsoft管理控制台来定义)在非常小的粒度级别上决定应该赋予代码什么权限。需要做什么工作才能确保机器或某个应用程序的安全?什么也不需要,因为所有的代码都自动运行在CLR的安全环境中,但可以在必要时禁用安全性。除了相信正在执行的代码是可信赖的之外,还要允许应用程序的用户访问他们需要的特性(但不要太多),这一点也是非常重要的。依靠基于
3、角色的安全性,.NET可以对用户和角色进行有效的管理。本章将讨论.NET中有助于管理安全的一些特性,其中包括.NET怎样避开有害的代码、怎样管理安全性策略,以及怎样编程访问安全子系统等。除此之外,还将讨论怎样安全地部署.NET应用程序,并且给出一些小的应用程序示例,以巩固本章介绍的概念。19.1 代码访问的安全性代码访问的安全性是.NET的一个特性,它根据代码的信任级别来管理代码。如果CLR非常信赖代码,允许它们运行,就会开始执行代码。但是,根据提供给程序集的权限,代码也许要在有限制的环境中运行。如果代码没有得到足够的信赖去运行,或者虽然代码运行了,但试图执行没有相关权限的操作,则会产生一个安
4、全异常(其类型是SecurityException或它的子类)。代码访问的安全性系统意味着可以停止有害代码的运行,也可以允许代码运行在受保护的环境中,在受保护的环境中,我们相信代码不会进行破坏。例如,如果用户试图运行一个应用程序,执行从Internet上下载的代码,则默认的安全性策略将生成一个异常,该应用程序会启动失败。同样,如果用户从网络驱动器上运行应用程序,则那个应用程序可以运行,但是如果那个应用程序试图访问本地驱动器上的文件,运行库就会产生一个异常,根据应用程序中处理错误的程序,应用程序会退出对文件的访问,或者退出执行。对于大多数应用程序而言,.NET代码访问的安全性都是非常有用的,但它
5、在后台起作用。代码访问的安全性提供了高水平的保护,以远离有害的代码,但是,通常我们涉及不到这个方面。而只考虑安全性策略的管理,尤其是在把桌面应用程序配置为信赖提供应用程序的软件厂商的代码时,就更要考虑安全性策略的管理。在开发应用程序时,对于其中包含的元素,如果要严密地控制它们的安全性,则可以使用代码访问的安全性。例如,如果公司的数据库中包含极其机密的数据,则可以使用代码访问的安全性,规定什么代码允许访问数据库,而什么代码不允许访问数据库。代码访问的安全性的主要目的是保护资源(例如本地磁盘、网络和用户接口等)免受有害代码的破坏,而不是使软件免受用户的破坏。对于与用户相关的安全问题,通常可以使用W
6、indows内置的用户安全子系统,或者利用.NET中基于角色的安全性,这些内容将在本章的后面讨论。代码访问的安全性以两个高层次的概念为基础,即代码组(Code Group)和权限(Permission)。下面讨论这两个概念,因为它们构成了后面章节的基础: 代码组:代码组用于把具有相似特征的代码集合到一组。通常,集合时所依据的最重要特征就是代码来自哪里。例如,代码组包括“Internet”(代码来自Internet)和“Intranet”(代码来自LAN)。把程序集放到代码组中所使用的信息称为“证据”。CLR收集的其他证据包括代码的发布者、代码的强名以及下载代码的URI等。代码组的排列是层次状的
7、,程序集总是与几个代码组相匹配。层次根部的代码组称为“All Code”,包含其他所有的代码组。层次用于确定程序集属于哪一个代码组,如果程序集提供的证据与树中的代码组不匹配,则程序集不属于树的任何一个代码组。 权限:权限是允许每一个代码组执行的动作。例如,权限包括“可以访问用户界面”和“可以访问本地存储器”等。系统管理员通常在Enterprise级、Machine级和User级上管理权限。CLR中的Virtual Execution System用于载入和运行程序。Virtual Execution System提供了执行托管代码所需要的功能,并使用程序集元数据把模块在运行期间连接在一起。当V
8、ES载入程序集时,VES通常把程序集与一个或多个代码组相匹配。每一个代码组都被赋予了一个或多个权限,指定各个代码组中的程序集可以执行什么动作。例如,如果MyComputer代码组被赋予FileIOPermission权限,则意味着来自本地机器的程序集可以读写本地文件系统。19.1.1 代码组代码组有一个称之为成员条件的入口需求(entry requirement)。如果要把程序集划归某个代码组,该程序集就必须符合那个代码组的成员条件。例如,成员条件可以是“程序集来自站点”或“这个软件的发布者是Microsoft公司”等。每一个代码组都有一个并且只有一个成员条件。在.NET中,代码组可以使用的成
9、员条件如下: Zone:代码来自的区域 Site:代码来自的Web站点 Strong name:代码唯一的、可验证的名称。强名详见第16章。 Publisher:代码发布者 URL:代码来自的具体位置 Hash value:程序集的散列值 Skip verification:请求Skip verification的代码避开代码验证检查。代码的验证可以确保代码以定义合理和可接受的方式访问类型。运行库不能确保类型不安全的代码是安全的。 Application directory:程序集在应用程序中的位置 All code :符合条件的所有代码 Custom:与用户相关的条件上述成员条件的第一个类型
10、就是Zone,这个类型是最常用的。Zone是一段代码区域的开端,表示下面的内容:MyComputer、Internet、Intranet、Trusted或Untrusted。使用Internet Explorer中的安全选项可以对这些区域进行管理,后面在讨论怎样管理安全性策略时,再讨论这些内容。虽然设置是在Internet Explorer中管理的,但是它们将应用于整个机器。很明显,那些配置选项在非Microsoft浏览器中是不能使用的,实际上,使用.NET Framework编写的页面控件只能在Internet Explorer上工作。代码组的安排是层次状的,根部是All Code成员条件,
11、如图19-1所示。从这个图中可以看出,每一个代码组都有一个成员条件,并且指定赋予代码组的权限。注意,如果程序集不符合代码组中的成员条件,则CLR不会给它匹配那个代码组下面的代码组。图 19-11. Caspol.exe代码访问安全性策略工具本章将花大量的篇幅介绍命令行工具:代码访问安全性策略工具。要得到它的选项列表,只需输入下面的命令:caspol.exe ?使用下面的命令把输出发送给一个文本文件:caspol.exe output.txt.NET也包括一个Microsoft Management Console管理单元,它用于管理代码访问的安全性。但是,这里只使用命令行实用程序caspol.
12、exe,以易于理解本章的示例,还可以创建脚本,更改安全性策略,在把策略应用到大量的机器上时,这是非常有用的。使用caspol.exe,可以查看机器上的代码组。caspol.exe的执行结果是列出机器上代码组的层次结构,并描述每一个代码组。键入如下命令:caspol.exe listdescription另外,-listdescription选项还有一个缩写方式:-ld。下面是该命令的结果:Microsoft (R) .NET Framework CasPol 2.0.50215.44Copyright (C) Microsoft Corporation. All rights reserved
13、.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 local computer 1.1.1. Micr
14、osoft_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 the intranet zone. This p
15、ermission 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.2. Intranet_Same_Dire
16、ctory_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.1. Internet_Same_Sit
17、e_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 grants the right to
18、 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 区域中的代码在默认状态下比本地驱动器中的代码有更严格的限制;本地驱动器中的代码通常有访问本地磁盘上数据的权限,但是Internet中的程序集在默认状态下就没有这个权限。使用caspol.exe和它在M
19、icrosoft Management Console中的等价选项,可以为每一个代码访问组指定信任级别,还可以按照更小的粒度方式管理代码组和权限。再看看代码访问组,但是,这次的信息比上次要少一些。确保以本地管理员身份登录后,打开命令提示窗口,输入下面的命令:caspol.exe listgroups得到如下信息:Microsoft (R) .NET Framework CasPol 2.0.50215.44Copyright (C) Microsoft Corporation. All rights reserved.Security is ONExecution checking is ON
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c# 2005 net30 高级 编程 19 NET 安全性
限制150内