我正在为ACM解决方案(如TopCoder,Timus等)编写一种通用的竞争系统。当用户使用Web服务发送他的解决方案时,我需要运行/编译它。我想为它设置限制,以便安全地运行它们(无法访问外部文件,无法获取系统时间,无法更改工作目录等) 有两种用户解决方案:
可编译的解决方案(又名c / c ++ / pascal),jit-ed和字节码解决方案(c#,java)
解释解决方案(lisp / ruby / python / php)
Contester系统是用C#编写的.NET 3.5。 Contester可以在Mono上运行Linux,也可以在.NET上运行。
最好的方法是什么?如果能够限制编译的解决方案(使用PermissionAttributes),但我不知道如何限制解释的解决方案。
答案 0 :(得分:0)
最简单(看到您可能需要完全信任)是在非常有限的用户帐户下运行。 IIRC的访客帐户不能用于此。
编辑:
干净的VM可能是理想的。