【问题标题】:Limit assembly in its permissions in c#在 c# 中限制程序集的权限
【发布时间】:2012-12-09 07:21:39
【问题描述】:

我正在用 C# 开发一个能够动态加载 dll 的应用程序。这些 dll 代表我的“应用程序”。我想限制这些应用程序的权限。例如(我的主要问题之一)阻止访问光盘。因为我的应用正在使用我的主应用域的功能和实例,所以我不希望它们在单独的沙盒应用域中运行。

这可能吗?

【问题讨论】:

  • 您的目标是什么版本的 .Net。 .net 4 和以前的版本之间存在差异。
  • 主要针对.NET 4 ;)

标签: c# permissions .net-assembly


【解决方案1】:

既然您提到了磁盘访问,请考虑使用 .Net 的 Code Access Security,它就是为此目的而设计的。

定义表示访问各种系统资源的权限的权限和权限集。

在不复制文档的情况下,我只想说您的应用程序的代码可能会调用插件的代码,但会限制它执行特定的操作,例如启动新线程或访问磁盘。

以下是您可以限制访问的一些资源:

【讨论】:

  • 好吧,我没有找到任何有用的例子。你可能有一个给我吗?
【解决方案2】:

我当然不确定如何实现这一切,但看起来可能需要接口 IPermission,我在 SO 上找到了另一个答案,这可能会有所帮助。

Implementing IPermission for custom code access security

【讨论】:

    【解决方案3】:

    我不确定我是否了解您希望获得旅行许可的方向。假设您希望“应用程序”告诉主应用程序它需要什么(就像 android 应用程序如何向手机发出权限信号),您可以定义每个模块实现的 IAccessRights 接口和定义它想要或可以拥有的访问级别。

    public interface IAccessRights
    {
      Bool CanReadFromDisk { get; }
      Bool CanWriteToDisk { get; };
      Bool CanAccessNetwork { get; }
    }
    

    然后由模块为接口实现一个类,并在加载时检查对象并相应地协调权限。如果需要两种方式,请制定一种模式,允许主应用程序设置(允许)模块的权限。

    旁注:除此之外,我没有看到一种方法可以在不深入了解系统本身的情况下禁止像File.Delete 这样的直接调用(挂钩等等)。

    【讨论】:

      猜你喜欢
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 2011-05-31
      • 2013-06-11
      • 2023-04-10
      相关资源
      最近更新 更多