我正在玩弄构建一个在线 C# 解释器的想法,有点像Codepad。现在有明显的安全问题:
- 无限循环
- System.Diagnostics.Process.Start
- 几乎整个 System.IO 命名空间
我对 C# 的了解并不完全是微不足道的,但我确信还有很多关于它的知识,以及我没有想到的东西。你会注意什么?
一些精度,我计划在一个使用 Mono 的小型 Linux VPS 上运行它。
我正在玩弄构建一个在线 C# 解释器的想法,有点像Codepad。现在有明显的安全问题:
我对 C# 的了解并不完全是微不足道的,但我确信还有很多关于它的知识,以及我没有想到的东西。你会注意什么?
一些精度,我计划在一个使用 Mono 的小型 Linux VPS 上运行它。
想到反射,因为你可以从 GetType() 到Assembly
任何你想要的东西。
实际上用户代码可以做任何事情。特殊情况很难处理。在我看来,最好的方法是:
a)创建仅具有执行权限的沙盒应用程序域。这确保了很多事情,例如无法弄乱文件系统或调用本机库。
b)创建新进程并在其中启动您的 appdomain。
然后密切监视进程的内存和 CPU 消耗。如果有任何问题 - 杀死它。请注意,这是您可以杀死的进程,而不是 appdomain。使用 appdomain 您可以尝试卸载它,但如果恶意代码在 finally 子句中运行,则它将无法工作。
这仍然存在一些(我知道的)问题:
所以总而言之还是有风险的。我也在玩弄这个想法,这是当前的结果:rundotnet
查看此链接,您将能够在在线 C# 解释器上学到一些东西,尝试一些东西并阅读输出异常以了解它们是如何产生的。