.net 4部分信任GAC的程序集

时间:2012-06-06 11:06:53

标签: c# .net security appdomain

我正在尝试创建一个沙盒应用程序域。为实现这一点,我使用AppDomain.CreateDomain,将DLL的路径设置为沙箱。

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

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

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

1 个答案:

答案 0 :(得分: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();
}