【问题标题】:Roslyn c# scripting sandboxRoslyn c# 脚本沙箱
【发布时间】:2016-07-06 13:48:38
【问题描述】:

有没有一种方法可以沙箱执行脚本,这样它a)不能做任何“危险”的事情,b)它可以访问它想要的任何文件,只要文件是与脚本文件本身在同一目录中。有点像是将所有文件路径视为相对

我想我是在询问 Roslyn 的脚本安全措施及其定制级别。

【问题讨论】:

  • Roslyn 根本不会帮你。
  • Roslyn 在执行脚本时绝对没有安全性?这比使用 codedom 伪造脚本还要糟糕。
  • 安全地允许任意代码是一个非常的难题。 Roslyn 没有试图解决这个问题。你不应该运行不受信任的脚本。
  • 其实,如果你还想保护同一台电脑上其他数据的保密性,那基本上是不可能的。
  • 是的,我希望有一种简单的方法来“保护”事物。因为.Net 可以为游戏制作相当强大的脚本引擎。看来我得另找路线了,谢谢指教!

标签: c# sandbox roslyn


【解决方案1】:

这是可能的,但正如 SLaks 所说,这是一个难题。您可能应该阅读In .NET 4.0, how do I 'sandbox' an in-memory assembly and execute a method?。您需要以下步骤

  • 使用 CSharpCodeProvider 或 VBCodeProvider 将源代码编译为硬盘上的程序集。
  • 创建一个新的 AppDomain,只授予它您希望它拥有的权限。
  • 使用 MarshalByRefObject 在您的原始 AppDomain 和您刚刚创建的子 AppDomain 之间来回通信。请参阅thisthis

【讨论】:

  • 答:我希望避免使用 System.CodeDom。 B:我也希望避免创建另一个 appdomain。 C:我需要对脚本权限进行比这允许的更大的控制。例如,我可以使用使用 file-IO 的脚本,但前提是我可以强制所有 file-io 活动在相对于我的应用程序的 .exe 的目录中工作(是的,即使他们尝试指定绝对目录) .不过,老实说,我知道这些目标是遥不可及的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多