如何在node.js中安全地运行用户提交的脚本

如何在node.js中安全地运行用户提交的脚本,node.js,Node.js,方法很少 (1) eval() (2) 使用节点在新上下文中计算代码的能力 (3) 使用类似 但我不确定哪一个更安全,性能更好。关于我的用例,我几乎无法解释。用户将提交脚本,我将向该脚本传递一个对象,该脚本中已经定义了处理逻辑,最后它将返回我希望在应用程序中获得的对象以供进一步使用 我在互联网上搜索过,但找不到一些关于走哪条路的好建议?我在一个项目中有类似的要求,在我的研究中遇到了你的问题,让我分享我的发现: 使用eval+vm.runInNewContext(): 这可能是不安全的,从邮件列表

方法很少 (1) eval() (2) 使用节点在新上下文中计算代码的能力 (3) 使用类似

但我不确定哪一个更安全,性能更好。关于我的用例,我几乎无法解释。用户将提交脚本,我将向该脚本传递一个对象,该脚本中已经定义了处理逻辑,最后它将返回我希望在应用程序中获得的对象以供进一步使用


我在互联网上搜索过,但找不到一些关于走哪条路的好建议?

我在一个项目中有类似的要求,在我的研究中遇到了你的问题,让我分享我的发现:

使用
eval
+
vm.runInNewContext
():

这可能是不安全的,从邮件列表和问题跟踪器中的声明来看,这也是不推荐使用的。为此,建议使用您链接的沙盒模块

另见:

使用子进程():

如果您不计划太多的并发性,这可能是一个很好的解决方案。新的子级是一个新的V8实例,启动和使用大约10MB内存大约需要30毫秒。你可以在完成后杀死孩子并释放内存

沙盒模块():


该模块就是为此目的而构建的,并使用子进程。它会以最简单的方式解决你的问题。您还可以使用它作为一个示例,说明如何创建自己的基于子进程的解决方案。

这些脚本是用javascript编写的。您是否使用了
VM
模块,它直接内置到节点中,让您为运行脚本定义一个上下文