很少有方法 (1) eval() (2) 使用节点在新上下文中评估代码的能力 (3) 使用类似https://github.com/gf3/sandbox#readme
但我不确定哪一个更安全并提供良好的性能。我几乎无法解释我的用例。用户将提交脚本,我会将一个对象传递给该脚本,该脚本已经在其中定义了处理逻辑,最后它将返回一个对象,我想在我的应用程序中获取该对象以供进一步使用。
我在互联网上搜索过,但找不到一些关于走哪条路的好建议?
很少有方法 (1) eval() (2) 使用节点在新上下文中评估代码的能力 (3) 使用类似https://github.com/gf3/sandbox#readme
但我不确定哪一个更安全并提供良好的性能。我几乎无法解释我的用例。用户将提交脚本,我会将一个对象传递给该脚本,该脚本已经在其中定义了处理逻辑,最后它将返回一个对象,我想在我的应用程序中获取该对象以供进一步使用。
我在互联网上搜索过,但找不到一些关于走哪条路的好建议?
我在我的一个项目中也有类似的要求,并且在研究过程中遇到了您的问题,让我分享一下我的发现:
使用eval
+ vm.runInNewContext
(http://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):
该模块是为此目的而构建的,并使用子进程。它将以最简单的方式解决您的问题。您也可以将其用作如何创建自己的基于子进程的解决方案的示例。