我目前正在为我的应用程序添加一个界面,以便其他人可以使用插件扩展它。我的应用程序被MMO游戏玩家使用,我将无法控制插件(因为任何人都可以制作它们),我希望我可以对插件中的代码进行一定程度的控制。
有人害怕是有人制作插件,其中包含开始写入“允许”文件夹之外的文件夹的错误代码,或者按照设计执行此操作。由于这将由MMO游戏玩家运行,某种键盘记录器会非常糟糕。
所以我希望有一种方法让我: 强制插件在沙箱中运行,在沙盒中它无法直接访问文件系统,窗口或网络。实际上强制他们使用我为这些操作提供的API。 我认为检查插件dll可能是可行的,希望它包含它使用的命名空间列表,而不是加载包含“坏”命名空间的插件。
我的插件界面基于this great codeproject artice,我确实尝试搜索有关此内容的一些信息。但我无法将我的搜索精确到一个有用的地方,如果它的技能水平相当于C#和一些跨平台的c ++。
答案 0 :(得分:2)
在加载之前,可以检查组件是否有某些东西。在程序集中执行代码或构造类型之前,您可以使用反射运行整个程序集类型和引用集,并搜索“无效”引用。然而,这并不会非常有效,因为你总是在寻找不好的东西 - 当真的,你需要定义好的操作,而只是允许那些。
为插件干净地实施不同的安全策略的唯一方法是将插件加载到不同的AppDomain。
通过在其自己的AppDomain中加载插件,您可以对其代码强制执行不同的安全策略(基本上在沙箱中运行)。您可以提供传递到插件中的接口或类,以使其能够访问插件本身之外的功能。