【问题标题】:How to create a coding sandbox with cloud functions for executing users code on the server? Dos/don'ts?如何创建具有云功能的编码沙箱以在服务器上执行用户代码?做/不做?
【发布时间】:2019-09-27 03:47:03
【问题描述】:

我正在从事一个类似于 Codecademy 的项目,并正在研究如何执行潜在的恶意用户代码。我可以在客户端运行 html、css 和 js,但我需要在服务器上执行编译语言的代码。

对于不熟悉 Codecademy 的人来说,它是一个交互式网站,教用户如何编码。有一些编码挑战,用户输入他们的解决方案,该解决方案在带有测试用例的服务器上执行。如果代码通过测试,则允许用户继续下一个挑战。你可能猜到我最关心的是在服务器端执行用户代码。

我认为保护我的后端的最佳方法是创建层并使用容器将编译器与服务器的其余部分分开。我的计划是为每种编程语言创建微服务。我打算使用(gcp 或 aws)云功能来做到这一点。

在这些部分之后,我迷失了。我认为我应该使用 docker 实例化容器并在该容器中运行用户代码并进行测试并将结果返回给主服务器。假设使用 docker 图像(或使用 compilebox 之类的东西)很简单,但我不确定性能。因为每次发送解决方案时,都会从头开始构建一个容器,并在运行代码后将其销毁。我关心的第二个问题是云功能的支付计划。由于我不想为服务器成本支付数百万美元,因此我需要以某种方式限制用户访问该服务。

由于我没有使用云功能的经验,我不确定这是否是一个有效的计划。我应该使用微服务还是应该创建一个经典的单体后端。如果您有任何其他想法或建议,请随时分享。如果我的想法是有效的,请帮助我了解有关此案的注意事项。

注意:我在后端使用 Node。

谢谢

【问题讨论】:

    标签: node.js docker


    【解决方案1】:

    google 的 katacoda 在您的网站中提供嵌入式外壳:

    <script src="//katacoda.com/embed.js"></script>
    <div id="katacoda-scenario-1"
        data-katacoda-id="<username>/<scenario-name>"
        data-katacoda-color="004d7f"
        style="height: 600px; padding-top: 20px;"></div>
    

    https://www.katacoda.com/embed

    在您的情况下可能会非常有用。

    这种解决方案听起来比构建自己的沙盒要简单和安全,

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2015-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多