限制.net插件可以访问的内容

时间:2010-04-14 23:33:20

标签: c# security plugins

我有一个可以通过反射加载插件的Web应用程序。它目前使用Assembly.LoadFrom()Activator.CreateInstance()来完成此操作。现在,插件被加载到同一个AppDomain中,可以访问我的应用程序中的任何内容以及我的应用程序可以访问的任何内容。

我正在寻找的是一种限制插件可以出于安全目的访问的类和方法的方法。我想让所有的类和方法在被调用时抛出异常,除非它们被列入白名单。我基本上将API类中的所有函数和一些数据传输对象列入白名单。

我也不希望插件能够自己访问文件系统或数据库。我想我可以在单独的AppDomain中使用信任级别来做到这一点。

有没有人有任何好的想法或资源?这可以通过代码访问安全性或.net 4中新的安全透明代码功能来完成吗?

2 个答案:

答案 0 :(得分:3)

如果要应用常规访问限制,则使用单独的AppDomain是正确的方法。至于限制对特定于应用程序的逻辑的访问,只是不要将“app internal”服务对象的实例提供给插件对象。此外,任何非MarshalByRef的引用类型对象都不会跨越AppDomain边界,因此这些对象可以安全访问,即使有暴露的方法会尝试返回它们。

答案 1 :(得分:0)

我通常更像一个信任的人,所以我会选择一个单独的app-domain,
但是通过你的问题,我猜你比我更疲惫。

如果你真的想要安全起见,我会说在一个单独的过程中加载插件,并将插件接口提供给一个"进程间"桥,只是为了它需要的东西...

这样,您确定只选择插入要插入的插件。

此外,您可以轻松地启动此守护进程作为一个弱的"对系统调用,文件系统和环境的访问权限受限的用户。