node.js - 如何创建具有云功能的编码沙箱以在服务器上执行用户代码?做/不做?

标签 node.js docker

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

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

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

在那些部分之后,我迷路了。我认为我应该使用docker实例化容器,并使用测试在该容器中运行用户的代码,然后将结果返回到主服务器。假设使用docker镜像(或使用类似compilebox的东西)会很简单,但是我不确定性能。因为每次发送解决方案时,都会从头开始构建容器,并且在运行代码后,该容器将被破坏。我的第二个担心是云功能的付款计划。我不知何故需要限制用户对服务的访问,因为我不想为服务器成本支付数百万美元。

由于我没有使用云功能的经验,因此我不确定这是否是有效的计划。我应该使用微服务还是应该创建经典的整体后端。如果您有任何其他想法或建议,请随时分享。如果我的想法是正确的,请就此案做和不做帮助。

注意:我在后端使用Node。

谢谢

最佳答案

google的katacoda在您的网站中提供了嵌入式shell:

<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

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

与构建自己的沙箱相比,这种解决方案听起来更简单,更安全,

好运!

关于node.js - 如何创建具有云功能的编码沙箱以在服务器上执行用户代码?做/不做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58121365/

相关文章:

使用 node.js 的带数字的字符串的正则表达式

mongodb - 无法使用docker-compose运行具有副本集的mongo容器

docker - TestCafe docker-无法使用运行器类运行测试

azure - 尝试创建 docker 容器功能应用程序,当我执行 docker run 时出现错误 "Storage not defined"

docker - docker 中的composer-playground无法连接到hlf v1

node.js - 取消订阅仅在必要时发出一次的可观察计时器?

javascript - Puppeteer 循环并转换为对象

docker - 将 args 传递给容器时 Kubernetes pod/部署?

node.js - 我如何 npm 更新 package-lock.json 中的依赖版本?

node.js - node.js 中是否有与 Fabric.io 或 crashlytics 接口(interface)的模块来创建 Electron 应用程序?