c# - .net 4 部分信任来自 GAC 的程序集

标签 c# .net security appdomain

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

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

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

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

谢谢!

最佳答案

如果两个程序集都已完全签名,则 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();
}

关于c# - .net 4 部分信任来自 GAC 的程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10912969/

相关文章:

c# - WebBrowser 控制焦点

java - System.setSecurityManager(null) 的影响

api - SSL:我需要保护每个端点吗

c# - 有没有办法在 Api Controller 中获取当前用户

c# - C# 如何用从一个文本框中输入的值填充数组

c# - 中止 HttpWebRequest 将不起作用

java - 试图在 asp.net 和 jsp 之间做出决定

c# - 在运行时创建的控件的访问值

.net - 使用 .net 数据注释验证颜色(十六进制值)

ruby-on-rails - Rails 图像和跟踪保护