.NET的代码访问安全(CAS)机制

本文深入浅出地介绍了.NET Framework中的代码访问安全(CAS)机制,包括其工作原理、关键概念如安全策略级别、证据、权限集等,并通过具体场景帮助读者理解CAS的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该篇文章是我于2009年6月10日通过自己编写的工具,批量从位于在博客园的博客站点(http://chenxizhang.cnblogs.com)同步而来。文章中的图片地址仍然是链接到博客园的。特此说明!

陈希章

原文地址:http://www.cnblogs.com/chenxizhang/archive/2008/09/08/1286573.html
原文标题:.NET的代码访问安全(CAS)机制
原文发表:2008/9/8 2:19:00

.NET Framework中一个比较难懂的部分是CAS,很多开发人员都对此不甚了了。很多次在讲课中提到这些内容,大家的反应也不一。下面这个图很好地说明了CAS是如何工作的?

image

下面略微地对其进行讲解

首先,CLR会在运行程序集之前,收集该程序集所携带的证据(Evidence),这个证据其实就好比是我们的身份证的概念。不过,程序集的证据有很多种类型,例如它所运行的位置(区域),它所携带的签名(强名称),或者来自某个发行者等等,如下图所示。有两个比较特殊的证据这里没有列出来:所有代码,应用程序目录。

一个程序集可能携带多个证据。例如它既在本地区域(My Computer)运行,又带有强名称。这样就有两个证据。

image

得到了程序集所携带的证据信息之外,CLR继续工作。它检查安全策略(4个策略级别都会检查),在每个级别,把每一个证据匹配到的代码组,所对应的权限集所包含的权限进行合并。

这里首先要搞清楚的是,安全策略会有4个级别,企业=》计算机=》用户=》应用程序域。这四个策略级别都需要检查。

最后,把四个级别检查得到的权限结果,取它们的交集。得到程序集所最终拥有的权限。

所以,要理解CAS,重要几个概念如下

1. Security Policy Level 安全策略级别:一共有4个

2. Code Group 代码组:可以自定义(企业级别可能需要域管理员才能更改,计算机级别需要本机管理员才能更改,用户级别可以由用户自己更改,应用程序域级别由程序指定).代码组还可以嵌套,就是说可能有子代码组。一般是先按区域定义代码组,然后再在不同的区域代码组中定义子代码组。例如默认情况下,计算机这个级别的代码组定义如下

image

代码组有几个特殊的选项,可以在必要的情况下,阻止进一步的检查

image

3.Evidence 证据:程序集所携带的条件

image

4.PermissionSet 权限集:权限的集合

代码组是对某类证据所应该匹配的权限集的定义

image

5.Permission 权限

 image

 

 

下面有一个典型的场景,有助于大家的理解:

一个人从Internet上下载了一个程序到了本地计算机,这时如果执行的话,会因为在”我的电脑”这个区域,所以会通过Computer这个Security Policy的代码组检查获得Fulltrust权限

如果他的机器是加入了AD,而域管理员设置了位于”我的电脑”这个区域所获得的权限是Everything权限的话,那么两者相权,最后得到的权限是Everything的(比Fulltrust更低)

用户不是很放心这个程序集,想以Internet这个区域的权限集运行它,而且这时候他不是以管理员登陆的(不能修改Machine级别的Security Policy),他可以修改User这个级别的设置,例如把”我的电脑”这个区域的权限集指定为internet

最后这个程序集只能以Internet的权限集运行,而用户所做的这些更改不会影响到计算机以及其他用户

CAS是完全独立的,但没有取代掉RBS,¨它只是加了一道可以设置的防线

两者结合取最小权限

¨例如CAS授予程序集可以访问某个文件夹,但用户权限不被授权,则仍然不能访问

¨程序集=>CAS=>RBS(ACL)

作者:陈希章
出处:http://blog.youkuaiyun.com/chen_xizhang
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值