【问题标题】:.net 4 partial trust an assembly from GAC.net 4 部分信任来自 GAC 的程序集
【发布时间】:2012-06-06 11:06:53
【问题描述】:

我正在尝试创建一个沙盒应用程序域。为了实现这一点,我使用了AppDomain.CreateDomain,提供了要沙盒化的 DLL 的路径。

但是,我注意到如果该 DLL 在 GAC 中,则该 DLL 是完全受信任的,因此如果其中有 PermissionSet.Assert,它可以接收不受限制的访问。

所以,我想知道是否有办法

  1. 强制 DLL 从路径加载,而不是从 GAC 加载,因此它将是部分信任的。
  2. 或 - 将 GAC 中的某个 DLL 标记为部分信任。

谢谢!

【问题讨论】:

    标签: c# .net security appdomain


    【解决方案1】:

    如果两个程序集都已完全签名,则 CLR 将使用 GAC 中的一个。如果您将目标路径中的那个不签名,CLR 将使用那个代替。

    如果这不是一个选项,那么您需要使用 CreateDomain 覆盖之一,您可以在其中定义程序集所需的权限集。更多关于覆盖的信息可以在这里找到:http://msdn.microsoft.com/en-us/library/ms130766.aspx

    取自http://davedewinter.com/2009/05/22/how-to-host-a-partial-trust-sandbox/...的用法示例...

    static void RunInPartialTrust()
    {
        AppDomainSetup setup = new AppDomainSetup
        {
            ApplicationBase = Environment.CurrentDirectory
        };
    
        PermissionSet permissions = new PermissionSet(null);
        permissions.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
        permissions.AddPermission(new ReflectionPermission(ReflectionPermissionFlag.RestrictedMemberAccess));
        AppDomain appDomain = AppDomain.CreateDomain(
            "Partial Trust AppDomain",
            null,
            setup,
            permissions
        );
    
        Program p = (Program)appDomain.CreateInstanceAndUnwrap(
            typeof(Program).Assembly.FullName,
            typeof(Program).FullName
        );
    
        p.PartialTrustMain();
    }
    

    【讨论】:

    猜你喜欢
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多