如何使用有限的权限动态编译和执行C#代码?

时间:2009-05-31 06:26:50

标签: .net permissions

我不难将代码保存到临时文件夹,使用csc.exe编译它并动态加载程序集,但如何以有限的权限执行代码呢?

例如,如何禁止代码......

  • 创建新主题。
  • 进行任何I / O操作。
  • 授予更高的权限。
  • 收集系统信息。
  • 执行死循环(好吧,这不是关于安全性)。
  • 使用太多内存。
  • 任何其他重要的事情......

欢迎任何信息(博客/文章/论文/手册......)。

3 个答案:

答案 0 :(得分:3)

您可能需要在不同的AppDomain中加载程序集,您创建的AppDomain会为其提供您希望拥有的权限。通常,加载到默认AppDomain的程序集将具有委派给该AppDomain的权限。通过创建另一个AppDomain,您可以完全控制AppDomain的权限,该权限将传播到加载到其中的程序集。

然而,有一点需要注意的是,对加载到另一个AppDomain中的代码的调用需要进行封送处理,这会对性能产生一些影响。

以下文章可以帮助您入门:

http://blogs.msdn.com/shawnfa/archive/2004/10/25/247379.aspx

http://blogs.msdn.com/shawnfa/archive/2004/10/22/246549.aspx

答案 1 :(得分:0)

有两种看待这个的方法;第一个是通过一个AppDomain和一个单独的信任,jrista给出了一个很好的答案。第二个是:不编译任意/用户代码;-p根据场景,您可以构建一个只能访问您乐意展示的功能的DSL,并编译 。我成功地使用过这种方法很多次了。这创建了一个非常受控制的沙箱 - 唯一要注意的是无限循环之类的东西,但如果真的需要,那么即使这样也是可以修复的。

所以我猜真正的问题是:输入是C#吗?或者这只是一个方便吗?

答案 2 :(得分:0)

IMO,开始是创建一个访客用户帐户来运行该流程。然后按照其他步骤操作。