我有一个沙箱应用程序,它在具有受限权限的单独域中运行不受信任的代码。就像这个例子一样: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?