我正忙着构建在线C#解释器,有点像Codepad。现在有明显的安全问题:在线c#解释器安全问题
- 无限循环
- System.Diagnostics.Process.Start
- 差不多整个System.IO命名空间
我的C#的知识是不完全无关紧要,但我确信有很多知道更多的东西,加上我没有想到的东西。你会注意什么?
一些精度,我打算在使用Mono的小型Linux VPS上运行这个精度。
我正忙着构建在线C#解释器,有点像Codepad。现在有明显的安全问题:在线c#解释器安全问题
我的C#的知识是不完全无关紧要,但我确信有很多知道更多的东西,加上我没有想到的东西。你会注意什么?
一些精度,我打算在使用Mono的小型Linux VPS上运行这个精度。
使用Mono的Compiler as service功能。它可以编译为兼容Silverlight的DLL(客户端配置文件),并且has been已经可以,您可以checkout。这应该解决您对IO的一些担忧。
+1:这听起来像是要走的路,因为微软已经完成了在DLL本身内定义安全风险的工作。之后,您只需关注误用问题(例如,使用您的服务进行DOS攻击的用户)。 – StriplingWarrior 2011-03-01 23:56:54
这不需要客户端安装Silverlight吗? – DotnetDude 2011-03-02 15:42:26
@DotNetDude:在Runcs示例中,silvelight是必需的 - 但如果您在服务器上运行Mono.CSharp DLL,则它只是需要安装.NET的服务器。 (客户端配置文件只需要.NET,而不是silverlight)。 – 2011-03-03 08:35:32
由于你可以从GetType()去Assembly
几乎任何你想要的东西,所以想到了思考。
IMO,反射正是你想要避免的,因为它允许你执行(可能)任意代码,而不是你想为了安全目的而强制执行的受限子集。 – 2011-03-01 23:52:29
其实用户代码可以做任何事情。这将是很难处理的特殊情况。在我看来,最好的办法是:
a)create sandbox appdomain只有执行权限。这确保了许多事情,如无法混淆文件系统或调用本地库。
b)创建新的流程并在其中启动您的appdomain。
然后监控内存和CPU消耗的过程。如果出现任何问题 - 杀死它。请注意,这是您可以杀死的进程,而不是appdomain。使用appdomain你可以尝试卸载它,但是如果恶意代码在finally子句中运行,那么它将无法工作。
还有一些(知我)问题与此:
无论如何总有一种风险。我当时也在想这个想法,下面是当前结果:rundotnet
查看此链接,您将能够了解在线C#解释器的一些内容,尝试一些内容并阅读输出异常以了解如何他们做到了。
我知道这个问题的性质可能不是很StackExchange十岁上下,所以我想我会接受最完整的答案。 – 2011-03-01 23:32:38
它是否与Java具有基本相同的安全机制? – 2011-03-01 23:50:33
你完成了你的翻译? – Shimmy 2011-12-22 10:58:17