我正在从事与Codecademy类似的项目,并对如何执行潜在的恶意用户代码进行了一些研究。我可以在客户端运行html,css和js,但是我需要在服务器上执行用于编译语言的代码。
对于不熟悉Codecademy的人,这是一个交互式网站,教用户如何编码。存在一些编码挑战,用户输入他们的解决方案,该解决方案将在服务器上通过测试用例执行。如果代码通过测试,则允许用户继续进行下一个挑战。您可能会猜到,我最大的担心是在服务器端执行用户代码。
我认为保护后端安全的最佳方法是创建层并使用容器将编译器与服务器其余部分分开。我的计划是为每种编程语言创建微服务。我打算使用(gcp或aws)云功能来做到这一点。
在那些部分之后,我迷路了。我认为我应该使用docker实例化容器,并使用测试在该容器中运行用户的代码,然后将结果返回到主服务器。假设使用docker镜像(或使用compilebox之类的东西)会很简单,但是我不确定性能。因为每次发送解决方案时,都会从头开始构建容器,并且在运行代码之后,该容器将被销毁。我的第二个担心是云功能的付款计划。我不知何故需要限制用户对服务的访问,因为我不想为服务器成本支付数百万美元。
由于我没有使用云功能的经验,所以我不确定这是否是有效的计划。我应该使用微服务还是应该创建经典的整体后端。如果您还有其他想法或建议,请随时分享。如果我的想法是正确的,请就此案做或不做帮助。
注意:我正在后端使用Node。
感谢
google's 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
在您的情况下可能会非常有用。
这种解决方案听起来比构建您自己的沙盒要容易和安全得多,>
祝你好运😉