在线c#解释安全问题

时间:2011-03-01 23:31:03

标签: c# security interpretation runtime-compilation

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

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

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

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

4 个答案:

答案 0 :(得分:4)

使用Mono的Compiler as service功能。它可以编译为Silverlight兼容的DLL(客户端配置文件)和has been,您可以checkout。这应该解决你对IO的一些担忧。

答案 1 :(得分:1)

反思浮现在脑海中,因为你可以从GetType()到Assembly到你想要的任何东西。

答案 2 :(得分:1)

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

a)create sandbox appdomain仅具有执行权限。这可以确保很多事情,例如无法处理文件系统或调用本机库。

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

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

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

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

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

答案 3 :(得分:1)

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

http://rextester.com/NWDF62346