插件应用程序(我可以控制的插件内的命名空间/代码)(Plugins to application (

2019-09-23 13:58发布

即时通讯目前增加一个接口,我的应用程序,以便其他人可以用插件扩展它。 我的应用程序所使用的MMO游戏玩家和我不会有过任何的插件控制(在任何人都将被允许让他们),我希望我能有一定程度的控制权在插件的代码。

什么恐怕是有人做一个插件,或者包含恶意代码即开始写以外的文件夹“允许”文件夹或通过设计来实现的。 由于这将由MMO游戏玩家运行某种键盘记录器将是非常糟糕的。

因此,即时通讯希望有一个办法,我:强制插件的沙箱中运行它不具有文件系统,Windows或网络直接访问。 实际上迫使他们使用API​​我为那些行动。 我想这可能是更多钞票来检查插件的dll希望它包含的是什么命名空间,它使用的列表,并且根本就没有加载包含“坏”的命名空间的插件。

我的插件接口是基于这个伟大的CodeProject上条每页 ,我曾尝试寻找一些这方面的信息。 但我无法改进搜索到一个地步,它返回有用的东西,如果我的马瑟斯技能等级为C#和一些跨平台的C ++。

Answer 1:

您加载之前将有可能检查某些事情大会。 在此之前执行代码或组件内构造类型,你可以通过整套总成的类型和使用反射引用的运行,并搜索“无效”的引用。 然而,这不会是非常有效的,因为你一直在寻找的东西是不好的 - 当真的,你需要定义好,而不是操作,并且只允许那些。

干净强制执行插件不同的安全策略的唯一方法是将插件加载到一个不同的AppDomain 。

通过加载在它自己的AppDomain中的插件,你可以强制在其代码不同的安全策略(基本上是沙盒中运行它)。 您可以提供传递到插件,以便让它存取功能,而不仅仅是那些在插件本身接口或类。



文章来源: Plugins to application ( Can i control the namespace/code inside the plugins )