我正在用 C# 开发一个能够动态加载 dll 的应用程序。这些 dll 代表我的“应用程序”。我想限制这些应用程序的权限。例如(我的主要问题之一)阻止访问光盘。因为我的应用程序正在使用我的主应用程序域的功能和实例,所以我不希望它们在单独的沙盒应用程序域中运行。
这可能吗?
我正在用 C# 开发一个能够动态加载 dll 的应用程序。这些 dll 代表我的“应用程序”。我想限制这些应用程序的权限。例如(我的主要问题之一)阻止访问光盘。因为我的应用程序正在使用我的主应用程序域的功能和实例,所以我不希望它们在单独的沙盒应用程序域中运行。
这可能吗?
既然您提到了磁盘访问,请考虑使用 .Net 的Code Access Security,它是为此目的而设计的。
定义表示访问各种系统资源的权限的权限和权限集。
在不复制文档的情况下,我只想说您的应用程序的代码可能会调用插件的代码,但会限制它执行特定的操作,例如启动新线程或访问磁盘。
以下是您可以限制访问的一些资源:
我当然不确定如何实现这一切,但看起来可能需要接口 IPermission,我在 SO 上找到了另一个答案,这可能会有所帮助。
我不确定我是否了解您希望获得旅行许可的方向。假设您希望“应用程序”告诉主应用程序它需要什么(几乎就像 android 应用程序如何向手机发出权限信号),您可以定义IAccessRights
每个模块实现的接口并定义它想要或可以拥有的访问级别。
public interface IAccessRights
{
Bool CanReadFromDisk { get; }
Bool CanWriteToDisk { get; };
Bool CanAccessNetwork { get; }
}
然后由模块为接口实现一个类,并在加载时检查对象并相应地协调权限。如果需要两种方式,请制定一个允许主应用程序设置(允许)模块权限的模式。
旁注:除此之外,我没有看到一种方法来禁止直接调用,例如File.Delete
不深入了解系统本身(挂钩和其他)。