2

很少有方法 (1) eval() (2) 使用节点在新上下文中评估代码的能力 (3) 使用类似https://github.com/gf3/sandbox#readme

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

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

4

1 回答 1

1

我在我的一个项目中也有类似的要求,并且在研究过程中遇到了您的问题,让我分享一下我的发现:

使用eval+ vm.runInNewContexthttp://nodejs.org/docs/latest/api/vm.html#vm_sandboxes):

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

另见:https ://github.com/joyent/node/issues/1469

使用子进程(http://nodejs.org/api/child_process.html):

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

沙盒模块(https://github.com/gf3/sandbox):

该模块是为此目的而构建的,并使用子进程。它将以最简单的方式解决您的问题。您也可以将其用作如何创建自己的基于子进程的解决方案的示例。

于 2013-01-01T11:28:34.030 回答