安全地加载c#DLLs /程序集

时间:2017-09-16 16:24:56

标签: c#

我正在为C#应用程序开发一个“插件”系统。开发人员可以使用我们的API编写C#插件,然后用户可以将这些DLL添加到应用程序文件夹中,然后我们的应用程序将扫描/验证并加载(使用Assembly.LoadFrom

在我走得更远之前,我正在努力了解我需要注意的安全最佳实践。我可以找到很多关于生成安全DLL的信息,但我想尽最大努力加载 DLL。

有没有办法在一些隔离/锁定的上下文中加载每个DLL?那是什么应用程序域用于?

我认为这是准确的,但我是否正确阅读,我必须通过反射实质上与这些文件进行交互?

例如,这是Microsoft的technet的一个例子:

public class Loader : MarshalByRefObject
{
    object CallInternal(string dll, string typename, string method, object[] parameters)
    {
        Assembly a = Assembly.LoadFile(dll);
        object o = a.CreateInstance(typename);
        Type t = o.GetType();
        MethodInfo m = t.GetMethod(method);
        return m.Invoke(o, parameters);
    }
    public static object Call(string dll, string typename, string method, params object[] parameters)
    {
        AppDomain dom = AppDomain.CreateDomain("MyNewDomain");
        Loader ld = (Loader)dom.CreateInstanceAndUnwrap(Assembly.GetExecutingAssembly().FullName, typeof(Loader).FullName);
        object result = ld.CallInternal(dll, typename, method, parameters);
        AppDomain.Unload(dom);
        return result;
    }
}

这比我想要的用户友好程度要低得多。我对应用程序方面并不介意,但如果开发人员编写相互集成的mod,他们必须使用相同的东西。

另外......我是否需要担心(如果可能的话)不允许访问某些系统?如果他们编写读取文件的代码,我是否可以阻止他们读取应用程序根目录之外的任何内容?

0 个答案:

没有答案