理解CLR安全特征

ZDNet软件频道 时间:2004-03-11 作者:Builder.com |  我要评论()
本文关键词:
在.NET中,通用语言运行库(CLR)实现了卓越的效能增强,CLR不仅是.NET框架的一项重要特色,同时还支持.NET开发环境中重要的安全特性。
本文译自Builder.com,未经许可请勿转载

在.NET中,通用语言运行库(Common Language Runtime,CLR)实现了卓越的效能增强,它允许开发者们跨越多种语言进行编程(program)、调试(debug)、管理意外句柄(exception handling)与继承(inheritance)。CLR不仅是.NET框架的一项重要特色,同时还支持.NET开发环境中重要的安全特性。

与传统的COM应用不同,.NET应用程序都包括一个清单文件(manifest)和一些元数据(metadata)(无论是一个程序或是一个库)。同时,它还包括微软中间语言(MSIL)代码,不同类别的语言可以共享编译成MSIL的代码,MSIL代码被运行库(runtime)管理,被认为是“受控(managed)”代码。

一个.NET应用程序被称为一个配件(assembly)(尽管与汇编语言没多大联系)。配件相关的元数据包括了对所有从属物的描述,同时MSIL包含了即时(just-in-time ,JIT)编译器代码。配件的清单文件中携带了文件清单、安全信息、引用配件清单和版本号。因此,CLR拥有所有必要的信息以决定哪个配件需要执行以及他们该被定位于何处。你也可以使用相同的数据来效验应用程序中哪一部分出了问题。

当.NET应用程序运行时,CLR进行程序的解析。CLR能够拒绝非授权用户的访问和封杀非授权代码的使用。CRL同时管理着内存,并且基于配件所携带的元数据和清单文件信息执行版本控制(version control)。除了显而易见的安全特性外,应用程序将不再那么容易就陷入崩溃(甚至当有多个对象版本存在时),从而通过改善可靠性(reliability)增加了安全性。

.NET配件比COM文档携带了更多的信息,这使得.NET配件无需在主机系统上注册就能够运行(有时也将其做成一种安全措施),尽管通常这并不是什么好主意。

.NET框架安全特性将询问CLR哪个用户有权限运行应用程序和决定代码源;这是另一种安全效验,在未被授权的情况下将抛出SecurityException异常。

.NET框架安全模型有两个主要组件:传统的基于用户的安全和代码访问安全(Code Access Security ,CAS)组件。无论操作系统、internet服务器等提供了怎样的底层安全,.NET安全特性都将在其上运作。(在今后的文章中我们还将更进一步的探索CAS和基于用户的安全组件)。

考虑使用CLR和.NET框架有十分充足的理由,因为这使得不同的团队成员能够使用多种编程语言进行工作。为了全面的利用好CLR的特征,您需要记住一个很重要的规则:并不是所有的数据或变量类型都被CLR环境支持的语言所支持的。为了确保应用程序被.NET支持的各种语言正确的管理,您应该将您的变量选择域限制在通用语言规格(Common Language Specification)所支持的变量的一个子集内。

.NET,特别是CLR,加速了开发进程,也使编程人员在同一项目中可以使用多样化的语言。它允许程序员选择最适合于特殊模块的语言或是他们最常使用的语言。同时CLR生成更为稳定的代码并加入了重要的安全特征,例如垃圾清理(garbage cleanup)。

.NET的安全运行在操作系统的所有底层安全之上;因此,你应该将它看成一种深层防御(defense-in-depth)的一部分而不只是一种有用的安全工具。最重要的是,开发者们可以利用这些安全措施,即使在系统管理员未能适当的配置服务器或工作站的安全防护时,.NET的安全特性也能发挥作用。


本文作者: John McCormick是一名安全顾问,也是IT领域中众所周知的撰稿者,他共发表了超过15,500篇文章。


责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134