建立一个运行代码的网站

时间:2012-06-22 14:20:58

标签: java php javascript html css

我目前正在开发一个编程竞赛网站,并希望实现对提交代码并在网站上运行代码的支持。经过相当多的谷歌搜索,我仍然没有找到任何“指南”。

是否有人知道某个网站(或其他来源)包含一些基本指南或基本规则?

感谢所有回复。

PS:如果有人想知道所有的编程语言标签,我打算至少支持这些语言。

3 个答案:

答案 0 :(得分:1)

小心 - 如果你发现很难将这个项目分解成一些更小,更具战术性的问题,我强烈建议你不要试图在你的网站上实际运行任何其他人的代码。在创建网站本身方面,我建议尽可能利用预构建的组件或服务 - Wordpress,GitHub等。

获得提交后,您需要一种方法来运行 安全 。出于所有实际目的,这意味着您应该假设您运行其他人的代码的任何机器可能会自发地迸发出火焰。虽然其中一些语言确实具有您应该可以用来在“沙盒”中运行代码的功能,但您可能不会在所有这些语言中足够专业,无法正确保护所有这些语言。< / p>

似乎亚马逊的EC2可能会有所帮助 - 当您需要运行提交时启动虚拟机,并在完成后将其丢弃。他们有一些预先配置好的图像,可能非常适合运行这些代码,如果由于有缺陷或恶意代码而导致某些内容出现问题,你就不会太在意,因为你只是想扔掉它当你完成时离开。

答案 1 :(得分:1)

有一个站点已经这样做了,尽管是出于特定目的:抓取数据。

https://scraperwiki.com/ - 与jsfiddle不同, scraperwiki 执行服务器端代码。据我所知,他们可能通过亚马逊实例沙箱环境。鉴于他们支持的各种语言和抓图库,不确定他们的代码是否可以完全审核和消毒。

我认为大多数人都对于scraperwiki如何阻止黑客和垃圾邮件发送者滥用他们的资源感到困惑。他们对此很不满意;要么他们手动审核了所执行的所有代码,要么黑客/垃圾邮件发送者尚未抓住它们。由于该站点具有特定功能,因此他们可能会检查数据利用率以确定可疑活动。 ......但是,一个男人的网站刮痧是另一个男人的骚扰和注射/接收。

我的预感是,他们永远不会公开说明他们的安全审核流程是什么样的。

如果您真的必须这样做,那么在没有虚拟化的情况下执行此操作的最简单的方法是使用 eval()的变体。但是,并非所有语言都有。这将带您进入选项B,即虚拟化。比我更好的人可以解释如何将虚拟机定制为此效果,并且会在让陌生人滥用您的资源时正确地提醒您。相反,我将分享我的PHP经验。

几年前我创建了一个动态执行代码的项目(在本地机器上)。在键入时,它通过ajax获取代码并在每次击键后执行。以下是其行为的视频:http://www.youtube.com/watch?v=Yfxrt2pc3pg

五年后有三个改进原型,我仍然不确定如何负责任地将其作为一种常见资源锁定。

答案 2 :(得分:0)

对于Java来说,这非常简单:

  • 您必须创建Servlet,才能将源代码上传到服务器(for 例如,通过POST请求)

  • 使用Java Compiler API将源代码编译为字节码(tutorial

  • 您可以通过ClassLoader动态加载已编译的字节码并启动它(您也可以配置SecurityManager

  • 不要忘记MVC架构:)