C# 以编程方式限制外部进程资源
我正在开发一个.NET应用程序,它有一个第三方插件。这些插件以EXE文件的形式提供,与应用程序API和数据一起工作 出于安全考虑,我希望能够在通过我的应用程序启动它们时对它们进行“沙箱”处理。特别是,最重要的是能够限制对文件系统的驱动器或目录的访问 有什么办法可以做到这一点吗?或者以任何其他方式? 此外,由于我的软件向COM公开API,一些外部插件可能不会以托管代码编写,但也可能会放弃对非.NET插件的支持。对我们来说,更重要的是对这些插件进行沙箱处理C# 以编程方式限制外部进程资源,c#,c++,vb.net,sandbox,C#,C++,Vb.net,Sandbox,我正在开发一个.NET应用程序,它有一个第三方插件。这些插件以EXE文件的形式提供,与应用程序API和数据一起工作 出于安全考虑,我希望能够在通过我的应用程序启动它们时对它们进行“沙箱”处理。特别是,最重要的是能够限制对文件系统的驱动器或目录的访问 有什么办法可以做到这一点吗?或者以任何其他方式? 此外,由于我的软件向COM公开API,一些外部插件可能不会以托管代码编写,但也可能会放弃对非.NET插件的支持。对我们来说,更重要的是对这些插件进行沙箱处理 任何解决这一问题的方法都是值得赞赏的。鉴于
任何解决这一问题的方法都是值得赞赏的。鉴于您需要为一个不完全基于.NET的进程执行此操作,
AppDomain
s可能不足以完成此任务
<>我会考虑在Windows中运行处理。这使您可以设置一个沙箱来限制进程对CPU和内存等资源的使用
对文件系统的访问已基于使用自主访问控制列表的用户帐户进行处理。要限制对文件系统几个特定部分的访问,请设置用于运行沙盒作业的帐户,并为允许它们使用的文件系统部分设置允许访问的ACE。如果需要支持多个用户运行沙盒作业,则可能需要为沙盒作业设置一个用户组,并将ACE与该组而不是单个用户关联。无法对外部进程进行沙盒。流程隔离边界已经是一个相当不错的保证,它不能在您的流程中随意走动。下一步是使用不在Everyone组中的有限用户帐户运行它。在像serverfault.com这样的网站上提问,谢谢你的评论。我找到了AppDomain方式和罗纳尔多发送的链接。我的问题是,如果使用AppDomain,我们能将应用程序限制在文件系统上的特定目录吗?非常感谢您的回答,Jerry。我认为,对于我的答案来说,这几乎是完美的解决方案。实际上,我在您的方法中看到了这个问题:为了让示例完全可以理解,让我们假设我的插件是excel.exe,应该只允许它查看c:\allowed文件夹。如果我创建了新的Windows帐户,我必须修改整个文件系统的权限,以拒绝对所有文件夹的访问,除了c:\allowed,因为Windows上的默认权限配置。这在客户端机器上是不可接受的。我是对的还是遗漏了什么?