首页 文章

关于代码访问安全(CAS)工作范例的问题

提问于
浏览
0

我编写了以下代码来测试CAS:

[SecurityPermission(SecurityAction.Demand,Flags=SecurityPermissionFlag.Execution)]
    static void Main(string[] args)
    {
        Console.WriteLine("hello, world!");
    }

在.NET 2.0配置中,我使用上面程序集的强名称来创建代码组并为组 Nothing 权限设置 . 因此装配无法按预期启动 .

但我注意到,如果我删除以下属性:

[SecurityPermission(SecurityAction.Demand,Flags=SecurityPermissionFlag.Execution)]

该计划仍未启动 . 那么所谓 declarative security 具有属性的重点是什么?

我阅读了几篇关于CAS的教程,他们使用Imperative / Declarative Security来使用CAS . 但从上面的例子来看,似乎没有必要 .

如果我在没有Imperative / Declarative Security的情况下编写代码并且没有为我的程序集提供任何证据,那么CAS是否会盲目执行任何安全策略?

或者我是否误解了如何使用CAS?

谢谢 .

1 回答

  • 1

    CAS许可要求导致在产生需求的方法之上验证每个调用堆栈帧 . 由于程序集不运行任何代码来调用Main方法,因此不会针对任何代码评估需求 .

    通过策略拒绝执行权限会导致阻止执行程序集 . CLR本身在运行汇编代码时正在评估该权限 . 无需添加您自己的权限请求 .

    稍微退一步看看CAS要求(声明性或命令性)是如何使用的,请考虑权限保护对资源的访问 . 允许访问托管代码无法访问的资源(例如:文件系统)的任何代码都应提供可用于控制对该资源的访问的许可(例如:FileIOPermission) . 允许访问资源的代码还负责在允许访问资源之前对该权限提出要求 .

    编写托管代码的大多数开发人员永远不需要创建CAS权限或明确要求CAS权限,因为他们通常会访问由.NET基类库或其他Microsoft或第三方公开(并受到保护)的资源 . 党的图书馆 .

相关问题