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

时间:2016-04-24 06:49:26

标签: javascript node.js

所以我要做的是将javascript代码作为用户输入并返回结果。现在我正在使用eval执行代码提交的代码(带有一些安全检查)。但我明白这是非常不可靠的。所以我想要实现的是安全地在沙箱环境中运行它并将结果返回给用户。 E.g

输入:

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

输出:

[2,4,6]

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

1 个答案:

答案 0 :(得分:1)

  

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

许多vm module函数(如vm.runInNewContext())将返回字符串中最后一个语句的结果,类似于var userName = prompt("Please Enter Your Name", ""); var thetext = "name=" + userName; var expdate = ";expires=Mon, 27 Mar 2017 13:00:00 UTC"; var newtext = thetext; document.cookie = newtext;

eval()

vm.runInThisContext()

的说明中给出了捕获结果的示例