【问题标题】:.NET/Security: Limiting runtime-loaded assemblies from accessing certain APIs.NET/Security:限制运行时加载的程序集访问某些 API
【发布时间】:2011-04-17 22:47:40
【问题描述】:

在 shell 应用程序中,我需要能够在运行时加载和执行其他 .NET 程序集,但不能完全信任它们。本质上,我想限制它们(加载的程序集)接触任何系统资源(线程、网络等),唯一的例外是隔离存储。但是,来自“我”的程序集需要在完全信任的情况下执行。

我一直在考虑代码访问安全性,但我不太确定我应该使用它。

你会怎么做?

【问题讨论】:

    标签: c# .net security code-access-security trust


    【解决方案1】:

    CAS 几乎就是您所需要的。更具体地说,您希望将程序集加载到其自己的应用程序域中:

    var myEvidence = new Evidence(new object[] {SecurityZone.Internet});
    var newDomain = AppDomain.CreateDomain("InternetDomain");
    myDomain.Load("MyUntrustedAssembly.dll", myEvidence);
    myDomain.CreateInstanceAndUnwrap("MyUntrustedAssembly","MyUntrustedObjectType");
    
    //do your work with the untrusted assembly/type
    
    AppDomain.Unload(myDomain);
    

    阅读应用程序域、各种区域以及分配给它们的默认权限集。 Internet 是系统定义的区域/权限集中最严格的可用区域,程序集仍然可以在其中实际执行(还有受限区域;落入该区域的程序集无法运行)。您可以使用 .NET 配置工具来创建权限集并定义代码必须满足才能被授予权限集的条件(证据)。

    【讨论】:

    • 感谢您的建议!一件事:程序集需要执行 WPF UI。之前忘记提了。不过,我怀疑在这样一个禁区内这是否可能。
    • Internet 区域仍然可以访问 UI 线程;在那里运行的程序集可以创建和显示窗口。不过,我不知道您是否可以访问硬件加速图形,而且您绝对不能使用 GDI+ 来处理非托管窗口。
    猜你喜欢
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 2018-04-24
    • 2023-03-23
    • 2020-12-19
    相关资源
    最近更新 更多