【发布时间】:2020-01-12 08:08:13
【问题描述】:
我正在做一个在线 python 编译器的项目。当用户发送 python 时,服务器将执行它。我想要做的是,创建一个带有虚拟文件系统的沙箱,在其中执行该脚本,并且该沙箱应该远离真实服务器的文件系统,但 nodejs 应该能够控制该沙箱的标准输入和标准输出。
如何实现?
【问题讨论】:
-
请举个例子。
标签: node.js sandbox virtualfilesystem
我正在做一个在线 python 编译器的项目。当用户发送 python 时,服务器将执行它。我想要做的是,创建一个带有虚拟文件系统的沙箱,在其中执行该脚本,并且该沙箱应该远离真实服务器的文件系统,但 nodejs 应该能够控制该沙箱的标准输入和标准输出。
如何实现?
【问题讨论】:
标签: node.js sandbox virtualfilesystem
Docker 是沙盒处理的好方法。
你可以跑
docker run --network none python:3
来自您的 node.js 服务器。看看其他switches of docker run 尽可能多地塞上安全漏洞。
关键是,你运行 docker 命令from your node.js server and pass the user's python code via stdin。
现在,如果你的 node.js 服务器在一台机器上,而发送箱应该在另一台机器上运行,你告诉 docker 使用 DOCKER_HOST environment variable 连接到另一台机器。
Docker 容器将软件封装在一个完整的文件系统中,该文件系统包含它运行所需的一切:代码、运行时、系统工具、系统库——基本上是您可以安装在服务器上的任何东西。这保证了它始终以相同的方式运行,无论它运行在什么环境中。
这可能值得一读https://instabug.com/blog/the-difference-between-virtual-machines-and-containers/
【讨论】: