Assembly.CreateInstance和安全性

时间:2011-11-29 20:11:36

标签: c# security scripting

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

我采取的步骤:

CompilerResults r = CSharpCodeProvider.CompileAssemblyFromSource(source);

Assembly a = r.CompiledAssembly;

IScript s = a.CreateInstance(...);

s.EntryPoint(...);

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:-2)

编辑:忽略这一点,这不安全!

查看System.Security.Permissions.SecurityPermission(以及FileIOPermission)和this tutorial等子类。如果要暂时拒绝代码执行不安全的操作,可以使用如下语句:

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