2

我为我的应用程序编写了一个插件管理器,它利用 codedom 将 c# 代码编译到类库中并实例化它的类型。它工作得很好,现在我希望限制已编译程序集的权限。不幸的是,我不知道该怎么做。据我了解,我应该以某种方式使用 CompilerParameters.Evidence,但我不清楚如何使用。为了清楚起见,我不想简单地将组件分类为某个区域,我想将其限制为在插件管理器构造函数中作为参数传递的权限集。我还想提一下,我不会将程序集加载到新的 appdomin 中,它与应用程序的其余部分在同一个域上执行。

谢谢。

4

1 回答 1

1

处理安全性的 CodeDOM 示例对 google 来说很棘手。经过几个小时的阅读,我发现了两种方法。

最好的似乎是托管插件框架,因为它专为您的用例场景而设计。 限制插件汇编代码访问

CAS(代码访问安全)也是一种选择,但它似乎不太受欢迎并且即将淘汰。这是从这个 [SO post][3] 中提取的示例

var myEvidence = new Evidence(new object[] {SecurityZone.Internet});
var newDomain = AppDomain.CreateDomain("InternetDomain");
myDomain.Load("MyUntrustedAssembly.dll", myEvidence);
myDomain.CreateInstanceAndUnwrap("MyUntrustedAssembly","MyUntrustedObjectType");

CAS 参考 .NET/Security:限制运行时加载的程序集访问某些 API http://www.gamedev.net/community/forums/topic.asp?topic_id=418038 http://www.go4answers.com/Example/codedom -security-64586.aspx

于 2010-12-24T12:16:52.873 回答