zoukankan      html  css  js  c++  java
  • .NET的代码访问安全(CAS)机制

    .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)

  • 相关阅读:
    [USACO4.2]草地排水Drainage Ditches
    bzoj3236:[AHOI2013]作业
    小A买彩票-(组合数)
    CSS样式整理大全
    P1880 [NOI1995]石子合并-(环形区间dp)
    P1147连续自然数和-(尺取法)
    POJ2456Aggressive cows-(二分判定)
    NYOJ737石子合并(二)-(区间dp)
    牛客网-乌龟跑步-(dfs)
    int和string之间的转换
  • 原文地址:https://www.cnblogs.com/weihengblogs/p/2735237.html
Copyright © 2011-2022 走看看