我想在我的API上运行第三方.NET程序集。我想让它按自己的意愿调用自己的方法和对象,但是拒绝它访问我的API没有明确给出的任何东西。特别是,如果我的API将对象作为IMyObject
传递给第三方代码,我不希望他们使用反射或任何方法将该对象提升为,例如MyObject
实现接口。
有没有办法否认在第三方程序集中使用反射的能力?我完全控制了一切,所以我不需要阻止人们反编译我的程序集,只是在运行时滥用它。
答案 0 :(得分:4)
您正在寻找的是在沙盒中运行程序集。这可以通过.Net中的CAS (Code Access Security)
来实现。
以下是它的工作原理。您创建了AppDomain
,为其分配了有限的权限。例如,您允许显示UI但不允许使用文件系统或反射。然后将一个组件加载到其中并让它运行。
.Net 4.0引入了一种全新的安全模型。但我对此并不了解。
这是让你入门的东西:
Discover Techniques for Safely Hosting Untrusted Add-Ins with the .NET Framework 2.0
答案 1 :(得分:0)
如果呼叫者正在“完全信任”上运行,则无法做任何事情。他将始终可以完全访问该程序集。
最好是混淆装配。这将使装配更难以重新设计。