C#加载沙盒装配

BoJ*_*JaN 7 .net c# module sandbox

好的,我有一个应用程序,我想添加对其他人的支持来编写应用程序将加载的模块.

这些模块是一个扩展我的Module类的类,用.Net编写.我需要知道如何在沙盒环境中加载这些DLL,只允许它们在某些目录中读/写.

这可能吗?

Dr.*_*ABT 10

是的,这是可能的.使用代码访问安全性和.NET Sandbox.我建议你看看CSScript库(开源).这是一个库,它提供C#脚本并动态编译为动态程序集.我在一个项目中使用它来允许最终用户编写C#脚本并执行它们,允许与系统中的类进行交互.该项目要求他们无法访问File IO或MessageBox(UI),因为用户脚本要在服务器上执行.CSSCript使用.NET框架的元素来限制程序集有权访问的内容,如果调用任何这些禁止类型,您将获得异常.

那么,看看那个.我将编辑我的答案,一旦我找到了一些更详细的如何其可能的,只是为了让你知道这可能的!


好的发现了.以下是我几年前与CSScript作者的讨论:

我:

我正在开发一个应用程序,并希望公开用户通过UI编写某些操作脚本的能力.CSScript看起来非常好用.但是,我也希望允许用户执行此操作并在Web服务器上执行其脚本.现在这是一个安全噩梦,因为用户可以写"Directory.Delete(@"C:\",true)"并擦除硬盘驱动器.那么是否可以限制用户可以从其脚本访问的程序集,命名空间甚至类,以便在安全的沙箱中运行CSScript?

奥列格:

直接有吸引力​​的解决方案是使用.NET Sandbox.它专为此类场景而设计.CLR标准沙盒可用于运行带有CS脚本的脚本的主机应用程序.这个想法是你在加载可疑脚本之前初始化CAS,其余的是CLR责任.如果您需要配置目录/文件权限,则可以使用CAS工具进行配置.这种方式脚本是用户提供的例程的"运输".CS-Script是实现此类传输的便捷机制,但实际的安全问题由.NET Sendoxing解决,它具有全面的功能集,几乎涵盖了所有可能的安全方案.使用CS脚本可下载文件,您可以找到Sendboxing示例(\ Samples\Sandboxing),它演示了如何防止脚本执行文件I/O操作(例如创建文件).

因此,我认为您需要查看.NET Sandbox并将程序集加载到其中.我意识到这个示例特定于C#Scripting,但我相信它适用于您的场景,因为上面的CSScript示例将向您展示实现沙盒和安全性的方法.

可以在此处找到有关如何将程序集加载到沙箱中的一些具体示例:

在我们讨论模块加载时,你听说过Microsoft Prism吗?这为模块加载和依赖注入(通过UnityMEF)提供了一个很好的框架,这在开发插件架构时非常有用.

最好的祝福,