InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

.NET 4 Beta 2不再采用代码访问安全(CAS)模型

作者 Abel Avram 译者 王波 发布于 2010年1月31日

领域
架构 & 设计,
语言 & 开发
主题
安全 ,
.NET
标签
.NET Framework 4.0

从.NET Framework 1.0开始,微软就引入代码访问安全(CAS)模型,这是一项用于分配和管理托管代码的工具。.NET Framework 4.0 Beta 2并不赞成使用CAS,故默认情况下已经关闭该功能,而引入了第二级安全透明度的(Security Transparency Level 2)安全模型。

考虑到一项强大的功能可以帮助.NET比Java取得更大的进展,在.NET开发人员中CAS就变得不太流行,这是由于它自身的复杂性以及使用不当时会导致潜在的安全漏洞所致。除此以外,本地应用程序或者非托管代码可在完全信任的情况下继续运行,这让CAS更无用武之地。

.NET Framework 4.0中关闭CAS,表明所有通过Windows Explorer或者命令行运行的程序都处于完全可信状态。在IE浏览器或ASP.NET内部运行的.NET应用程序也会由它们的主机授于某种级别的信任度。

基于这项改变,当前开发中的代码也许会弹出警告或运行时异常:

这些安全策略改变的结果是:如果我们通过其他类型及成员显式或隐式调用过时的CAS安全策略类型和成员,我们也许会遇到编译警告和运行时异常。对于过时的类型和成员以及其替代者,请查看:代码访问安全策略的兼容性与移植
我们可以在运行时设置框架使用<NetFx40_LegacySecurityPolicy>配置要素来加入早期的CAS策略操作,以绕开警告或错误提示。然而,指定使用旧版安全策略并不包括该版本的任何自定义CAS策略,除非它移植到.NET Framework 4 Beta 2。

.NET 4.0 Beta 2扩展了早期的Security Transparency功能,该项功能首次在.NET 2.0中引入并在微软内部使用。托管代码在一个沙盒中运行就认为是透明的,因为它仅执行主机授权的操作,所以认为它是安全的。第二级透明度安全模型引入以下新元素:

在.NET Framework 4 Beta 2,透明度是一项强制措施,用于把应用程序代码和底层代码分开。透明度区分了可调用本地代码的关键代码和和不可调用本地代码的透明代码。透明代码可在许可范围内执行命令操作,但不能执行、调用、派生自关键代码或包含关键代码。

透明度强制措施的初始目标是要提供简单而高效的机制来隔离不同权限的代码组。在沙盒模型中,这些权限组不是完全信任(即不受约束)就是部分信任(即受制于沙盒的许可进行设定)。

桌面应用程序是完全可信的。因此,它们不受透明度模型的影响。

在.NET 4.0中有三种代码类型:透明代码、可靠和关键的安全代码和关键安全代码:

  • 透明代码——包括完全可信的运行代码,仅可调用其他的透明代码或可靠和关键的安全代码。它仅执行主域中部分可信的许可集(如果存在的话)允许的操作。 除此以外,透明方法不可以重写关键虚方法或实现关键接口方法
  • 可靠和关键的代码完全可信,但由透明代码调用。它公开了完全可信代码的部分表层代码。修正和安全确认在可靠和关键的代码中执行
  • 关键安全代码是完全可信的并可调用任何代码,但它不能由透明代码所调用

开发人员仍可使用CAS,如果他们的应用程序适用于早期的.NET Framework版本的话,但是他们不能使用在4.0 Beta 2或以后版本的最新功能。微软鼓励他们用Windows软件限制策略(SRP)来代替,它有更简单的安全机制来处理托管代码和本地应用程序。

查看英文原文:Code Access Security Is No Longer Used in .NET 4 Beta 2

译者 王波 是匆匆IT过客,涉足于.NET编程技术,潜心研究和译书,与友人共译《C# 3.0揭秘》 。

深度内容

大规模视频网站的计费与流量管理

本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011

专访Jeffrey Richter:Windows 8是微软的重中之重

Jeffrey Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffrey Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。