如何包装不受信任的应用程序?

时间:2009-09-11 13:19:10

标签: c# .net wrapping

想象一下一个不受信任的应用程序(插件),它从标准输入读取并写入标准输出。

如何获取此应用程序为指定输入返回的输出防止任何副作用

例如,如果应用程序删除磁盘上的文件,则应检测到该文件,并且应取消此尝试。

这是某种包装器应用程序。是否有可能建立它?

不太复杂的任务太有趣了:使用.NET制作这个包装器(主机和客户端都是用.NET语言编写的)。

1 个答案:

答案 0 :(得分:5)

最安全的方法是将该插件加载到您使用separate AppDomain配置的security evidence for the requirements you have中。

创建AppDomain时,您可以准确指定代码在此沙箱中可以执行的操作类型。在那里运行的代码仅限于您设置的限制。但是,这个过程可能会在您第一次这样做时感到困惑,并且可能仍然让您容易受到漏洞的影响。

使用AppDomains隔离程序集是一个有趣的过程。您认为您将插件加载到其他AppDomain中,然后通过AppDomain中的代理使用它们,但反过来说。他们需要在AppDomain中使用您的代理。如果您无法理解并正确执行此操作,则最终会在主AppDomain中加载插件代码并在那里执行,而不是在受限域中执行。如果你没有正确地做事,你会得到许多陷阱(订阅事件有一些有趣的副作用)。

我建议进行原型设计,了解CLR Via C#中的AppDomain章节,并尽可能多地阅读该主题。


这是我用来调查跨appdomain事件的测试应用程序 http://cid-f8be9de57b85cc35.skydrive.live.com/self.aspx/Public/appdomainevents.rar