如何在节点的沙盒环境中执行用户提交的javascript代码

How to execute user submitted javascript code in sandbox environment in node?

本文关键字:用户 执行 提交 代码 javascript 节点 环境      更新时间:2023-09-26

所以我要做的是将javascript代码作为用户的输入,并将结果返回给他。现在我正在执行用户提交的代码,仅使用 eval (有一些安全检查)。但我知道这是非常不可靠的。所以我想要实现的是安全地在沙盒环境中运行它并将结果返回给用户。例如

输入:

var a =[1,2,3];
a.map(n => n*2);

输出:

[2,4,6]

我尝试在节点中使用 vm,但我真的不明白如何从中获得最终结果。

我尝试在节点中使用 vm,但我真的不明白如何从中获得最终结果。

许多vm模块函数,如 vm.runInNewContext() ,将返回字符串中最后一个语句的结果,类似于 eval()

var vm = require('vm');
var script = 'var a = [1, 2, 3]; a.map(n => n * 2);';
var sandbox = {};
var result = vm.runInNewContext(script, sandbox);
console.log(sandbox); // { a: [1, 2, 3] }
console.log(result);  // [2, 4, 6]

描述中给出了捕获结果的示例vm.runInThisContext()