C# 第一个失败权限的类型为:-错误
我正在尝试创建一个沙箱来运行不受信任的代码。我一直在遵循Microsoft文档()中给出的示例 但是,我无法让程序正常运行,因为我一直在获取失败的权限/失败的程序集或AppDomain等 这是沙盒代码(取自给定的示例) 当程序运行时,调用目标时会捕获以下异常 (System.Security.SecurityException:请求失败。在第58行) 第一个失败的权限的类型是: System.Security.PermissionSet此需求用于: 失败程序集的授权集为: 失败的程序集或AppDomain为:不受信任的代码, 版本=1.0.0.0,区域性=中性,PublicKeyToken=36DF3255C2D3 失败程序集的区域是:MyComputer 失败的程序集是:C# 第一个失败权限的类型为:-错误,c#,sandbox,C#,Sandbox,我正在尝试创建一个沙箱来运行不受信任的代码。我一直在遵循Microsoft文档()中给出的示例 但是,我无法让程序正常运行,因为我一直在获取失败的权限/失败的程序集或AppDomain等 这是沙盒代码(取自给定的示例) 当程序运行时,调用目标时会捕获以下异常 (System.Security.SecurityException:请求失败。在第58行) 第一个失败的权限的类型是: System.Security.PermissionSet此需求用于: 失败程序集的授权集为: 失败的程序集或AppD
file:///C:Users/Sam/Desktop/SandboxExample/UntrustedCode/UntrustedCode/bin/debug/UntrustedCode.EXE
class Sandboxer : MarshalByRefObject
{
const string pathToUntrusted = @"..\..\..\UntrustedCode\bin\Debug";
const string untrustedAssembly = "UntrustedCode";
const string untrustedClass = "UntrustedCode.UntrustedClass";
const string entryPoint = "IsFibonacci";
private static Object[] parameters = { 45 };
static void Main()
{
AppDomainSetup adSetup = new AppDomainSetup();
adSetup.ApplicationBase = Path.GetFullPath(pathToUntrusted);
PermissionSet permSet = new PermissionSet(PermissionState.None);
permSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
StrongName fullTrustAssembly = typeof (Sandboxer).Assembly.Evidence.GetHostEvidence<StrongName>();
AppDomain newDomain = AppDomain.CreateDomain("Sandbox", null, adSetup, permSet, fullTrustAssembly);
//new AppDomain.
ObjectHandle handle = Activator.CreateInstanceFrom(
newDomain, typeof (Sandboxer).Assembly.ManifestModule.FullyQualifiedName,
typeof (Sandboxer).FullName
);
//untrusted code.
Sandboxer newDomainInstance = (Sandboxer)handle.Unwrap();
newDomainInstance.ExecuteUntrustedCode(untrustedAssembly, untrustedClass, entryPoint, parameters);
}
public void ExecuteUntrustedCode(string assemblyName, string typeName, string entryPoint, Object[] parameters)
{
MethodInfo target = Assembly.Load(assemblyName).GetType(typeName).GetMethod(entryPoint);
try {
//Now invoke the method.
bool retVal = (bool)target.Invoke(null, parameters);
}
catch (Exception ex)
{
new PermissionSet(PermissionState.Unrestricted).Assert();
Console.WriteLine("SecurityException caught:\n{0}", ex.ToString());
CodeAccessPermission.RevertAssert();
Console.ReadLine();
}
}
}
namespace UntrustedCode {
public class UntrustedClass {
public static bool IsFibonacci(int number) {
File.ReadAllText("C:\\Temp\\file.txt");
return false;
}
}
}