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)

  • 相关阅读:
    NO.6: 若不想编译器提供自动生成的函数,就应该明确拒绝
    NO.5: 了解C++编译器默认为你生成的构造/赋值/析构
    NO.4: 确定对象被使用前已被初始化
    NO.3: 尽量使用const
    NO.2: 尽量以const,enum,inline 替换 #define
    NO.1: 视C++为一个语言联邦
    C/C++ exception类
    C/C++ 类成员函数指针 类成员数据指针
    c++中的 Stl 算法(很乱别看)
    自定义类签发校验token-实现多方式登录-自定义反爬类-admin后台表管理字段自定义-群查接口-搜索-排序-分页
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1286573.html
Copyright © 2011-2022 走看看