限制c#中汇编的权限
本文关键字:权限 汇编 限制 | 更新日期: 2023-09-27 17:49:25
我正在用c#开发一个能够动态加载dll的应用程序。这些dll代表我的"应用程序"。我想限制这些应用程序的权限。例如(我的主要问题之一)阻止访问光盘。因为我的应用程序正在使用我的主应用程序域的功能和实例,我不希望它们在一个单独的沙盒应用程序域中运行。
这是可能的吗?
既然你提到了磁盘访问,考虑使用。net的代码访问安全性,它是为此目的而设计的。
定义权限和权限集,表示访问各种系统资源的权限。
不复制文档,让我说你的应用程序的代码可以调用插件的代码,但限制它做特定的事情,如启动新线程或访问磁盘。
以下是您可以限制访问的一些资源:
- System.Security.Permissions.FileIOPermission
- System.Security.Permissions.RegistryPermission
- System.Security.Permissions.UIPermission
我当然不确定如何实现这一切,但看起来接口IPermission可能是必需的,我在这里找到了另一个答案,可能会有所帮助。
实现IPermission自定义代码访问安全
我不确定我理解你想要许可的方向。假设您希望"应用程序"告诉主应用程序它需要(几乎像android应用程序如何向手机发送权限信号),您可以定义每个模块实现的IAccessRights
接口,并定义它想要或可以拥有的访问级别。
public interface IAccessRights
{
Bool CanReadFromDisk { get; }
Bool CanWriteToDisk { get; };
Bool CanAccessNetwork { get; }
}
然后由模块为接口实现一个类,并在加载时检查对象并相应地协调权限。如果需要是双向的,设计一个模式,允许主应用程序设置(允许)模块的权限。
旁注:除此之外,我不认为有一种方法可以在不深入系统本身(钩子等)的情况下禁止像File.Delete
这样的直接调用。