C# - 如何找出应用程序域所需的权限?

时间:2016-09-07 07:00:43

标签: c# python sandbox appdomain python.net

我有一个沙箱应用程序,它在具有受限权限的单独域中运行不受信任的代码。就像这个例子一样:https://msdn.microsoft.com/en-us/library/bb763046(v=vs.110).aspx

作为我不受信任的代码,我有一个Python.Net应用程序,它从.py文件中导入一些模块并运行它们。当为新域设置的权限设置如下时,一切正常:

PermissionSet permSet = new PermissionSet(PermissionState.Unrestricted);

但是我需要尽可能少地授予它权限。我尝试添加各种权限,但它仍然说它无法从它应该运行的不安全代码访问该方法。

PermissionSet permSet = new PermissionSet(PermissionState.None);
permSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
permSet.AddPermission(new FileIOPermission(PermissionState.Unrestricted));

An unhandled exception of type 'System.MethodAccessException' occurred in SandboxWithPythonNet.exe

如何检查我需要授予哪些权限才能正常运行?

EDIT1: 似乎在添加:

permSet.AddPermission(new ReflectionPermission(PermissionState.Unrestricted));
permSet.AddPermission(new PrincipalPermission(PermissionState.Unrestricted));

并设置

NewDomain.SetPrincipalPolicy(System.Security.Principal.PrincipalPolicy.WindowsPrincipal);

至少允许我使用不受信任的代码。 但是现在我无法运行Python.Runtime.Runtime.Initialize()因为它是透明的。错误说,对于允许运行本机代码的方法,它们必须是SecurityCritical或SecuritySafeCritical。

有没有办法将Python.Net的方法更改为SecurityCritical?

0 个答案:

没有答案