c# - 如何更改AppDomain的权限?

标签 c# security .net-4.0 permissions appdomain

我使用特殊方法创建sandobx:

internal static class Helper
{
    public static AppDomain CreateSandbox()
    {
        Contract.Ensures(Contract.Result<AppDomain>() != null);

        var platform = Assembly.GetExecutingAssembly();
        var name = platform.FullName + ": Sandbox " + Guid.NewGuid();
        var setup = new AppDomainSetup { ApplicationBase = platform.Location };
        var permissions = new PermissionSet(PermissionState.None);
        permissions.AddPermission(new FileIOPermission(FileIOPermissionAccess.Read | FileIOPermissionAccess.PathDiscovery, platform.Location));
        var sandbox = AppDomain.CreateDomain(name, null, setup, permissions);

        Contract.Assume(sandbox != null);

        return sandbox;
    }
}

当我使用创建的沙箱时,我想更改它的权限:

sandbox = Security.Helper.CreateSandbox();
sandbox.SetupInformation.ApplicationBase = Path.GetDirectoryName(path);
sandbox.PermissionSet.AddPermission(new FileIOPermission(FileIOPermissionAccess.Read | FileIOPermissionAccess.PathDiscovery, path));

但是当我将程序集加载到它时,我收到异常:

请求“System.Security.Permissions.FileIOPermission,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”类型的权限失败。

如何在创建 AppDomain 之后更改其权限?

最佳答案

在同质 AppDomain 中,唯一允许的权限集是 FullTrust 和创建域时定义的权限集。一旦授予,权限集就不能再扩展(AFAIK)。将插件保持在沙箱中,与您在创建自定义 AppDomain 时定义的 PermissionSet 绑定(bind),并通过常用的安全关键类库提供高级功能(需要提升的权限)。

另请参阅此处的答案和提示: http://social.msdn.microsoft.com/Forums/en-US/clr/thread/23a9197e-3581-4a28-912d-968004488773

关于c# - 如何更改AppDomain的权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8107162/

相关文章:

c# - 如何在 C# 中获取文件类型/扩展名的 64x64 图标?

c# - 从 Vb 调用时,COM-Interop 程序集未找到 native (.Net) 依赖项

java - 如何以编程方式创建数据库且注入(inject)安全?

javascript - 存在漏洞的 JavaScript 函数调用

c# - 嵌套在类中的扩展方法

C# WPF 图表工具包 : How to get independent-axis value from ColumnSeries in MouseRightButtonDown?

c# - 优化在 Sql server 中快速运行的 LINQ 查询?

c# - 如何将实体映射到包含层次结构的维度表?

c# - 如何使用 ServiceStack.Net 实现客户端身份验证

.net - WCF内网安全配置