【问题标题】:Plugins to application ( Can i control the namespace/code inside the plugins )应用程序插件(我可以控制插件内的命名空间/代码)
【发布时间】:2009-08-13 21:15:21
【问题描述】:

我目前正在向我的应用程序添加一个接口,以便其他人可以使用插件对其进行扩展。我的应用程序被 MMO 游戏玩家使用,我无法控制插件(因为任何人都可以制作它们),我希望我可以对插件中的代码有一定程度的控制。

我害怕的是有人制作了一个插件,该插件要么包含开始写入“允许”文件夹之外的文件夹的错误代码,要么是故意这样做的。由于这将由 MMO 游戏玩家运行,因此某种键盘记录器会非常糟糕。

所以我希望有办法让我: 强制插件在无法直接访问文件系统、Windows 或网络的沙箱中运行。实际上迫使他们使用我为这些操作提供的 API。 我在想检查插件 dll 可能是可能的,希望它包含它使用的命名空间列表,并且根本不加载包含“坏”命名空间的插件。

我的插件界面是基于this great codeproject artice 的,我确实尝试过搜索这方面的一些信息。但是我无法将我的搜索细化到它返回有用的东西,如果它数学我的技能水平是 C# 和一些跨平台 c++。

【问题讨论】:

  • 我会检查类似 Google 的 V8 可嵌入 Javascript 引擎的东西。它要求您至少使用一些 C++,但您可以公开您想要的任何接口/对象,而不是使用您链接的插件架构所要求的开放式方法。

标签: c# .net plugins interface


【解决方案1】:

可以在加载之前检查程序集的某些内容。在程序集中执行代码或构造类型之前,您可以使用反射运行整个程序集类型和引用集,并搜索“无效”引用。但是,这不会很有效,因为您总是在寻找不好的东西 - 实际上,您需要定义好的操作,并且只允许那些操作。

为插件完全执行不同安全策略的唯一方法是将插件加载到不同的AppDomain

通过在它自己的 AppDomain 中加载插件,您可以对其代码实施不同的安全策略(基本上在沙箱中运行它)。您可以提供传递给插件的接口或类,以使其能够访问插件本身之外的功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    相关资源
    最近更新 更多