Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#装载沙箱组件_C#_.net_Module_Sandbox - Fatal编程技术网

C#装载沙箱组件

C#装载沙箱组件,c#,.net,module,sandbox,C#,.net,Module,Sandbox,好的,我有一个应用程序,我想添加对其他人编写应用程序将加载的模块的支持 这些模块将是一个扩展我的模块类的类,用.Net编写。我需要知道如何在沙盒环境中加载这些DLL,只允许它们在某些目录中读/写 这可能吗?是的,这是可能的。使用代码访问安全性和.NET沙箱。我建议您看看这个库(开源)。这是一个提供C#脚本和动态汇编的库。我在一个项目中使用了它,允许最终用户编写C#脚本并执行它们,从而允许与我系统中的类进行交互。项目要求他们不能访问文件IO或MessageBox(UI),因为用户脚本要在服务器上执

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

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


这可能吗?

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

那么,看看这个。我会编辑我的答案,一旦我发现一些更详细的关于它是如何可能的,只是为了让你知道这是可能的


好的,我找到了。以下是几年前我与CSScript作者的讨论:

我:

我正在开发一个应用程序,希望让用户能够通过UI编写特定操作的脚本。CSScript看起来非常适合这个。然而,我也希望允许用户这样做,并在web服务器上执行他们的脚本。现在这是一个安全噩梦,因为用户可以写“Directory.Delete(@“C:\”,true)”并擦除硬盘。那么,是否有可能限制用户可以从脚本访问的程序集、名称空间甚至类,以便在安全的沙箱中运行CSScript

奥列格:

最有吸引力的解决方案是使用.NET沙盒。CLR标准沙盒可用于运行CS脚本的主机应用程序。这样做的目的是在加载可疑脚本之前初始化CAS,其余部分由CLR负责。如果需要配置目录/文件权限,可以使用CAS工具进行配置。这样,脚本是用户提供的例程的“传输”。CS脚本是实现这种传输的一种方便机制,但实际的安全问题由.NET Sendoxing解决,它具有一套全面的功能,几乎涵盖了所有可能的安全场景。使用CS script downloadables,您可以找到Sendboxing示例(\Samples\Sandboxing),该示例演示如何防止脚本执行文件I/O操作(例如创建文件)

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

有关如何将程序集加载到沙箱中的一些具体示例,请参见:

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


向您致意,

类似问题:,您的问题引用了
scripting
标签。您是否计划动态编译您的.NET代码,或者此标记如何应用于您的情况?感谢您提供的信息,我将在明天(凌晨3点)查看这些信息!我一直在尝试从工作中获得答案,但当我尝试加载模块时,它会说找不到它,或者如果它是依赖项,则会显示一个。希望明天我能找到你们发给我的链接。