首页 > 解决方案 > 使用虚拟文件系统在沙箱中运行 nodejs

问题描述

我正在开发一个在线 python 编译器项目。当用户发送 python 时,服务器将执行它。我想要做的是,创建一个带有虚拟文件系统的沙箱,在其中执行该脚本,并且该沙箱应该远离真实服务器的文件系统,但 nodejs 应该能够控制该沙箱的标准输入和标准输出。

如何使它成为可能?

标签: node.jssandboxvirtualfilesystem

解决方案


Docker是沙箱化的好方法。

你可以跑

docker run --network none python:3

从你的 node.js 服务器。查看docker run的其他开关,尽可能多地塞上安全漏洞。

问题是,您从 node.js 服务器运行 docker 命令并通过 stdin 传递用户的 python 代码

DOCKER_HOST现在,如果你的 node.js 服务器在一台机器上,而 sendbox 应该在另一台机器上运行,你告诉 docker 使用环境变量连接到另一台机器。

Docker 容器将软件包装在一个完整的文件系统中,该文件系统包含它运行所需的一切:代码、运行时、系统工具、系统库——基本上是你可以安装在服务器上的任何东西。这保证了无论它在什么环境中运行,它都将始终以相同的方式运行。

这可能值得一读https://instabug.com/blog/the-difference-between-virtual-machines-and-containers/


推荐阅读