gpt4 book ai didi

linux - 将用户编写的在服务器上运行的 node.js 脚本沙盒化

转载 作者:太空狗 更新时间:2023-10-29 12:27:13 25 4
gpt4 key购买 nike

我正在开发一个平台,用户可以在其中创建自己的“小部件”,小部件基本上是 js 片段(将来还会有 html 和 css)。

问题是即使用户不在网站上,它们也必须运行,所以基本上我的服务必须安排这些用户脚本不时运行。

我试图弄清楚哪种方式是“沙盒化”该脚本的最佳方式,我的第一个想法是在 Docker 中运行它自己的进程,所以假设用户设法以某种方式进入 shell 它将是一个虚拟机,希望他会被锁在里面。

我不是 Docker 专家,所以我什至不确定这是否有意义,无论如何这会产生另一个问题,即让数百名 docker 运行一个简单的 javascript 片段。

是否有任何“安全”的方式来做到这一点?也许在空范围内运行脚本并以某种方式删除对“require”方法的访问?

另一个要求是在超时时终止脚本。

编辑: - 找到这个相关的 stackexchange link

最佳答案

这可以通过 docker 来完成,您可以创建一个包含脚本的 docker 镜像,然后运行该镜像,该镜像会创建一个容器供脚本在其中运行。

您甚至可以让它变得 super 简单,并基于官方 node.js docker 图像创建一个通用图像,并在运行时传入用户自定义文件,运行它们,保存输出,然后您就完成了。这种方法很好,因为只需要维护一个图像,而且设置简单。

传入数据的最佳方式是在容器上创建一个卷挂载,并且每次都将用户目录挂载到容器的同一位置。

例如,假设您的主机具有这样的目录结构。

/users/
aaron/
bob/
chris/

然后当您运行容器时,您只需要更改卷挂载。

docker run -v /users/aaron:/user/ myimagename/myimage
docker run -v /users/bob:/user/ myimagename/myimage

我不确定输出是什么,但您可以将其写入容器内的/user/output,输出将存储在用户输出目录中。

就超时而言,您可以编写一个简单的脚本来查看 docker ps,如果它运行的时间超过限制,docker 将停止容器。

因为一切都在容器中运行,所以您可以一次运行多个,并且它们彼此隔离,也与主机隔离。

关于linux - 将用户编写的在服务器上运行的 node.js 脚本沙盒化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36954894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com