Assembly.CreateInstance and security

本文关键字:security and CreateInstance Assembly | 更新日期: 2023-09-27 18:16:13

我正在考虑使用c#按需编译代码的能力作为脚本语言的基础。我想知道,我如何沙箱脚本,我正在执行,使他们不能访问文件系统,网络等。基本上,我想限制正在运行的脚本的权限。

我走过的路:

CompilerResults r = CSharpCodeProvider.CompileAssemblyFromSource(source);
Assembly a = r.CompiledAssembly;
IScript s = a.CreateInstance(...);
s.EntryPoint(...);

Assembly.CreateInstance and security

推荐的方法是在沙盒应用域中执行可疑代码。http://blogs.msdn.com/b/shawnfa/archive/2006/04/19/579066.aspx给出了几个原因,一个更重要的原因是,从。net 4.0开始,大多数其他可能的方法都被弃用了。

编辑:别管这个,这是不安全的!

查看System.Security.Permissions.SecurityPermission(和子类,如FileIOPermission)和本教程。如果您想临时拒绝代码执行不安全的操作,您可以使用这样的语句:

NamedPermissionSet ps = new NamedPermissionSet("Nothing");
ps.Deny();
CallYourScriptHere();
CodeAccessPermission.RevertAll();