在线c#解释安全问题

我正在考虑建立一个在线C#解释器的想法,有点像Codepad 。 现在有明显的安全问题:

  • 无限循环
  • System.Diagnostics.Process.Start
  • 几乎整个System.IO命名空间

我对C#的了解并不是那么微不足道,但我确信有很多关于它的知识,以及我没有想到的东西。 你会注意什么?

一些精确,我计划在使用Mono的小型Linux VPS上运行它。

使用Mono的编译器作为服务function。 它可以编译为Silverlight兼容的DLL(客户端配置文件),并且已经可以检出 。 这应该解决您对IO的一些担忧。

想到了反思,因为你可以从GetType()到Assembly到你想要的任何东西。

实际上用户代码可以做任何事情。 处理特殊情况很难。 在我看来,最好的方法是:

a)仅使用执行权限创建沙盒应用程序域。 这确保了很多事情,如无法弄乱文件系统或调用本机库。

b)创建新流程并在其中启动您的appdomain。

然后紧密监视进程以获取内存和CPU消耗。 如果出现任何问题 – 杀死它。 请注意,这是您可以杀死的进程,而不是appdomain。 使用appdomain,您可以尝试卸载它,但如果在finally子句中运行的恶意代码则不起作用。

还有一些(我知道的)问题:

  • 放置用户编译的程序集时要小心。 实际上,即使是最少特权的appdomain用户代码也能够加载位于同一目录中的程序集并执行它们。
  • 我提到你应该紧紧监控过程。 代码(在finally子句中运行)在无限循环中产生线程,其中每个线程都执行相同的抓取内存非常快(根据我的观察)。 如果攻击者决定用这样的代码进行dos攻击 – 谁知道发生了什么:)也许一种方法是利用这个来启动低优先级的用户进程,以便监督线程有可能在加载的系统中进行适当的监视。

总而言之,无论如何都存在风险。 我也在考虑这个想法,这是目前的结果: rundotnet

查看此链接,您将能够了解有关在线C#解释器的信息,尝试一些内容并阅读输出exception以了解它们是如何实现的。

http://rextester.com/NWDF62346