我在使用C#的能力来按需编译代码作为脚本语言的基础。我想知道,我如何对我正在执行的脚本进行沙盒处理,以便它们无法访问文件系统,网络等。基本上,我希望对正在运行的脚本拥有有限的权限。Assembly.CreateInstance和安全
的步骤,我采取:
CompilerResults r = CSharpCodeProvider.CompileAssemblyFromSource(source);
Assembly a = r.CompiledAssembly;
IScript s = a.CreateInstance(...);
s.EntryPoint(...);
是否有任何东西阻止CallyourScriptHere()恢复您的示例中设置的所有权限? – MarkP
'RevertAll'仅恢复当前堆栈帧中设置的CAS权限,因此在'CallYourScriptHere'中调用它只会撤消在该方法中所做的更改。 – MagnatLU
这不能有效防范潜在的恶意代码。请参阅http://blogs.msdn.com/b/shawnfa/archive/2006/02/02/523390.aspx,了解为什么不应将堆栈走路修饰符用于沙盒。 –