我发现自己必须实现以下用例:我需要运行一个Web应用程序,用户可以在其中提交C程序,这些程序需要在我的后端安全运行。
我正在尝试使用Node来完成这项工作。在过去,我不得不做一些类似的事情,但用户提交的代码是JavaScript代码,我可以使用Node vm2模块。从本质上讲,我会创建一个VM,并使用用户提交的代码作为字符串参数调用其run
方法,然后收集输出并执行我必须执行的任何操作
我想知道使用相同的moule是否也能帮助我使用C代码。其想法是使用exec
首先调用gcc
并编译用户代码。之后,我将使用VM再次运行exec
,这一次传递生成的可执行文件作为结果。这安全吗?
我对vm2的理解还不够深入,不知道安全性是否仅限于执行JS代码,或者是否可以信任它也可以安全地运行任何任意的shell命令。
如果vm2不合适,在Node中以沙盒方式运行可执行文件的另一种方式是什么?如果您知道任何基于Python的解决方案,也可以提出建议。请注意,不管怎样,代码仍将作为主应用程序在一个单独的容器中执行,但我想确保用户不能随意删除它。
提前谢谢。
我目前正面临与您相同的挑战,试图使用spawn安全地执行一些不受信任的代码,所以我可以告诉您的是,vm2只适用于JS/TS代码,但无法控制由spawn、fork或exec创建的新进程会发生什么。
目前我还没有找到任何好的解决方案,但我正在考虑以权限有限的用户身份运行该流程。
由于您似乎可以访问C源代码,我建议您搜索如何运行不受信任的C程序(纯C(,并从这个角度来看,看看是否可以操纵C代码以获得更安全的环境。