【问题标题】:Load an Assembly with lower privileges加载具有较低权限的程序集
【发布时间】:2010-12-26 11:59:57
【问题描述】:

加载程序集并从中实例化一个类的最简单方法是什么,但这样做的方式是程序集具有有限的权限(沙盒)?代码不应该能够通过网络进行通信、写入文件系统或执行进程。

更新 我只是偶然发现了 Assembly.LoadFrom(string assemblyFile, Evidence securityEvidence) 这完全可以使用吗?不确定我在这个证据之下。

【问题讨论】:

    标签: c# .net security assemblies trust


    【解决方案1】:

    你需要在它自己的AppDomain中加载它。

    这是article describing the entire process

    【讨论】:

      【解决方案2】:

      另一种选择,但不是 100% 可靠,是依赖调用堆栈上的 CAS 拒绝令牌。

      假设加载的类的第一个初始方法将由您控制的代码调用,然后您可以使用拒绝安全操作来阻止该方法访问 .NET 框架的某些部分。

      代码大致如下:

      [SecurityPermission(SecurityAction.Deny, Flags = SecurityPermissionFlag.NoFlags ^ SecurityPermissionFlag.Assertion)]
      void CallExternalAssemblyClass(ExternalClass c)
      {
          c.SomeMethod();
      }
      

      建议的解决方案有一些注意事项,它假定您没有使用 Silverlight,并且如果程序集是使用特制的 CIL 程序集编写的,则存在潜在的安全风险。

      获得的好处是您可以避免使用单独的 AppDomain 以及与多个 AppDomain 相关的编组问题。

      【讨论】:

      • 很高兴知道还有另一种方法。 +1
      猜你喜欢
      • 1970-01-01
      • 2011-08-18
      • 2011-04-27
      • 1970-01-01
      • 2012-02-23
      • 2018-10-03
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多