7

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

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

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

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

4

4 回答 4

4

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

于 2011-03-01T23:51:25.713 回答
1

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

于 2011-03-01T23:36:20.627 回答
1

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

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

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

然后密切监视进程的内存和 CPU 消耗。如果有任何问题 - 杀死它。请注意,这是您可以杀死的进程,而不是 appdomain。使用 appdomain 您可以尝试卸载它,但如果恶意代码在 finally 子句中运行,则它将无法工作。

这仍然存在一些(我知道的)问题:

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

所以总而言之还是有风险的。我也在玩弄这个想法,这是当前的结果:rundotnet

于 2011-06-12T00:06:34.023 回答
1

查看此链接,您将能够在在线 C# 解释器上学到一些东西,尝试一些东西并阅读输出异常以了解它们是如何产生的。

http://rextester.com/NWDF62346

于 2011-12-29T23:42:00.743 回答