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

.net 如何使用有限的权限动态编译和执行C#代码?,.net,permissions,.net,Permissions,对我来说,将代码保存到temp文件夹、使用csc.exe编译代码并动态加载程序集并不困难,但如何在有限权限下执行代码 例如,我如何禁止代码 创建新线程 执行任何I/O操作 授予更高的权限 收集系统的信息 执行死循环(好吧,这与安全无关) 使用太多内存 任何其他危险的事情 欢迎提供任何信息(博客/文章/论文/手册…)。您可能需要将程序集加载到不同的AppDomain中,您可以通过创建AppDomain来授予程序集所需的权限。通常,加载到默认AppDomain的程序集将具有委派给该AppDoma

对我来说,将代码保存到temp文件夹、使用csc.exe编译代码并动态加载程序集并不困难,但如何在有限权限下执行代码

例如,我如何禁止代码

  • 创建新线程
  • 执行任何I/O操作
  • 授予更高的权限
  • 收集系统的信息
  • 执行死循环(好吧,这与安全无关)
  • 使用太多内存
  • 任何其他危险的事情

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

您可能需要将程序集加载到不同的AppDomain中,您可以通过创建AppDomain来授予程序集所需的权限。通常,加载到默认AppDomain的程序集将具有委派给该AppDomain的权限。通过创建另一个AppDomain,您将完全控制该AppDomain被授予的权限,该权限将向下传播到加载到其中的程序集

然而,需要注意的是,对加载到另一个AppDomain中的代码的调用将需要封送,这将在一定程度上影响性能

以下文章将帮助您入门:


有两种方法来看待这个问题;第一种是通过一个独立信任的
AppDomain
,jrista对此给出了一个很好的答案。第二是:不要编译任意/用户代码-p根据场景的不同,您可能能够构造一个只访问您愿意公开的功能的DSL,并对其进行编译。我已经多次成功地使用了这种方法。这将创建一个非常可控的沙箱-唯一需要注意的是无限循环之类的东西,但如果您真的需要,即使是无限循环也是可以修复的


所以我想真正的问题是:输入必须是C吗?或者这只是一种方便吗?

在我看来,首先要创建一个来宾用户帐户来运行流程。然后按照其他步骤操作。

不同的用户帐户不会阻止(从问题中)线程创建、内存过度使用、IO(来自公共区域)、系统信息收集(非私密数据)等。它涵盖了“其他危险事项”部分:)