node.js - 使用虚拟文件系统在沙箱中运行 nodejs
问题描述
我正在开发一个在线 python 编译器项目。当用户发送 python 时,服务器将执行它。我想要做的是,创建一个带有虚拟文件系统的沙箱,在其中执行该脚本,并且该沙箱应该远离真实服务器的文件系统,但 nodejs 应该能够控制该沙箱的标准输入和标准输出。
如何使它成为可能?
解决方案
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/
推荐阅读
- r - 使用 ggplot 或不同的包,我如何将多个图绘制在一起(可能作为保存的文件)而不挤压我的图?
- java - 将字节流分析成大对象
- vue.js - Vue获取父组件中传递的组件的子组件
- api - ASP.NET Core 5 MVC Web 应用程序 - 通过 xamarin 登录
- mysql - mariaddb 函数中未声明的变量 compid
- javascript - 云功能不偏移 Firestore 查询的日期
- angular - 表格搜索过滤器不起作用,Angular 10
- typescript - Why can TypeScript's compiler not analyze an array of types?
- c - 我无法在c中输入字符值
- mongodb - MongoDB 聚合 - 在单个查询中以 2 种方式分组