我为我的应用程序编写了一个插件管理器,它利用codedom将c#代码编译成类库并实现其类型。 它工作得很好,现在我希望限制编译程序集的权限。不幸的是,我不知道该怎么做。 据我所知,我应该以某种方式使用CompilerParameters.Evidence,但我不清楚如何。 为了清楚起见,我不希望简单地将assmbly分类为某个区域,我想将它限制为在插件管理器构造函数中作为参数传递的权限集。我还想提一下,我没有将程序集加载到一个新的appdomin中,它在与应用程序其余部分相同的域上执行。
感谢。
答案 0 :(得分:1)
处理安全性的CodeDOM示例对谷歌来说很棘手。经过几个小时的阅读,我找到了两种方法。
最好的似乎是托管插件框架,因为它专为您的用例Senario而设计。 Restrict plug-in assembly code access
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: Limiting runtime-loaded assemblies from accessing certain APIs http://www.gamedev.net/community/forums/topic.asp?topic_id=418038 http://www.go4answers.com/Example/codedom-security-64586.aspx