我正在寻找可以编译一些输入代码(可能是 C/Java)并可以在其上运行一些测试的 Web 服务。我应该遵循什么样的设计?我可以在我的服务器上放置什么编译器来完成这项工作?建议?优点?缺点?
4 回答
Kattis使用 GCC 和 Sun java 编译器来编译 C/C++/Java。您打算支持的平台当然将决定您可以使用哪些编译器。我认为如果您只使用多个编译器而不是试图找到一个可以编译您想要支持的每种语言的编译器,那对您来说会更容易。
最大的问题之一可能是阻止提交的代码接管您的主机。Java 包含对限制程序可以使用的类的内置支持,但我不确定如何防止在 C/C++ 中分叉和创建套接字之类的事情。
对于 Java,请参阅JavaCompiler。
我提供了一个名为SSCCE Text Based Compiler的小工具,它可以在客户端执行此操作,并且作为文档。请注意,它需要 Java SDK,而不仅仅是 JRE。
优点:
- 服务器端编译和运行代码听起来很时髦!
缺点:
很久以前,我还提供了一个工具来在我的一个域上编译代码(但不运行它)。事实证明,特定类型的代码可能会将 Sun 编译器捆绑在一起,这需要 30 多分钟才能编译不到 100 行代码!拒绝服务攻击,有人吗?由于我没有时间实施解决方案,因此我撤回了该工具。
为了运行代码,您几乎肯定需要实现一个全面的SecurityManager。
你可能会想要像Go Playground这样的东西
最简单的方法是允许用户上传自己的 JSP 页面的 Web 容器(如 Tomcat 或 Jetty)。
这些由 Web 容器自动编译,并在请求时执行。