0

我制作了一个运行良好的插件接口,但是由于它执行 C# 代码,因此可能会创建恶意插件,所以我正在考虑计算插件的 MD5 校验和并通过 SQL 数据库进行检查受信任的插件 MD5,但是我对接口非常了解,我不太确定如何实现这一点,这是我想要实现的示例:

//Program
...
LoadedPlugin.md5 = PluginFunctions.getMD5(LoadedPlugin);
...
string pluginmd5 = SomePlugin.md5;
...
//Here it's able to both set and get the MD5 value.

//The interface
public interface Foo
{
    string Name { get; }
    string md5 { get; set; }
    void OnCalled();
}

//The plugin
public class Plugin : Foo
{
    public Plugin()
    {

    }

    public string Name
    {
        get
        {
            return "Totally trustful plugin";
        }
    }

    public string md5
    {
        get
        {
            return "MD5 of a trustful plugin";
            //This is what I'm trying to prevent from happening!
        }
    }

    public void OnCalled()
    {
        //Malicious code here
    }
}

我将如何阻止设置并可能获取它自己的 MD5,但允许程序本身获取和设置 MD5。

4

1 回答 1

2

您需要某种插件无权访问的插件元数据对象。您在加载插件时跟踪此对象,如果有人需要插件实例,您将分发您创建的实例。

class PluginWithMetaData
{
  public PluginWithMetaData(Foo plugin)
  {
     Plugin = plugin;
     MD5 = PluginFunctions.GetMD5(plugin);
  }

  public Foo Plugin { get; private set; }
  public string MD5 { get; private set; } 
}

顺便说一句,在加载插件后检查哈希似乎很奇怪。那时它可能已经运行了一些恶意代码。您应该在加载程序集之前检查它的哈希值。

于 2013-08-03T05:39:45.007 回答