【问题标题】:Make a website for running code [closed]建立一个运行代码的网站[关闭]
【发布时间】:2012-06-22 14:20:58
【问题描述】:

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

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

感谢所有回复。

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

【问题讨论】:

  • 这看起来像是一长串相对简单的步骤。哪一个挡住了你?
  • 对于运行javascript、html、css、jquery,看看jsfiddle.net是如何工作的。要运行 php,请查看 writecodeonline.com/php
  • IMO 你的问题太宽泛了。此外,我并不真正理解这个问题。您的应用程序只需要您想要支持的所有语言的解释器...
  • 你还没有找到任何指南,因为你不明白你想要什么,如果你明白了,你会问谷歌正确的问题,谷歌会回答你。
  • 在德克斯特回答的逻辑里,你也应该看看codepad.org

标签: java php javascript html css


【解决方案1】:

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

收到提交后,您会希望有一种方法可以安全地运行它们。出于所有实际目的,这意味着您应该假设运行其他人代码的任何机器都可能自发地起火。虽然其中一些语言确实具有您应该能够用于在“沙箱”中运行代码的功能,但您可能不会在所有这些语言方面都足够熟练,无法正确保护所有这些语言。

似乎亚马逊的 EC2 之类的东西可能会有所帮助——当您需要运行提交时启动 VM,完成后将其丢弃。他们有一些预配置的图像,可能非常适合运行此代码,如果由于错误或恶意代码而出现问题,您不必太介意,因为您只是将其扔掉完成后离开。

【讨论】:

    【解决方案2】:

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

    https://scraperwiki.com/ - 与 jsfiddle 不同,scraperwiki 执行服务器端代码。据我所知,他们可能会通过亚马逊实例将环境沙箱化。鉴于他们支持的语言和抓取库的多样性,不确定他们的代码是否可以被完全审计和清理。

    我认为大多数人对于 scraperwiki 如何阻止黑客和垃圾邮件发送者滥用他们的资源感到困惑。他们对此一直保持沉默。要么他们已经手动审核了每一个执行的代码,要么黑客/垃圾邮件发送者还没有发现它们。由于该站点具有特定功能,因此他们可能会检查数据利用率以确定可疑活动。 ...但是,一个人的网站抓取是另一个人通过 get/post 的骚扰和注入。

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

    如果你真的必须这样做,最简单的不使用虚拟化的机械方法是使用 eval() 的变体。但是,并非所有语言都有。这会将您带到选项 B,即虚拟化。比我更好的人可以解释如何将虚拟机编组到这种效果,并且会适当地警告你让陌生人滥用你的资源。相反,我将分享我的 PHP 经验。

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

    五年和 3 个改进原型之后,我仍然不确定如何负责任地将其锁定为公共资源。

    【讨论】:

      【解决方案3】:

      对于 Java,这很简单:

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

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

      • 编译后的字节码可能通过ClassLoader 动态加载并启动(也可能配置SecurityManager

      • 别忘了 MVC 架构 :)

      【讨论】:

        猜你喜欢
        • 2012-09-14
        • 2010-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多