如何评估javascript字符串并从中调用函数(无窗口)

时间:2017-03-02 20:01:07

标签: javascript node.js server

我正在开发一种工具来帮助教授编程,在某些时候,我正在让客户端将javascript作为字符串发送到服务器。我总是从他们的代码中调用函数A和B,但我不确定如何限制他们的访问?

我现在正在做的事情:

eval(code);
userFunctionA = eval("getA");
userFunctionB = eval("getB");

var result = userFunctionA(param1, param2);

不幸的是,通过使用eval,他们可以访问我的所有全局变量和其他函数,如何限制他们的访问?

这是我找到的最佳参考,但他们非常关注" window",因为我的节点服务器,我没有窗口,我不能使用建议的iFrame或worker:Is it possible to restrict the scope of a javascript function?

注意:我正在寻找一种解决方案,它不会要求我在读取它们之前将其代码串分解为函数,因为这会禁用以下方面的学习:

function a() {fdafs}
b = a();
a = function (x){fsadg}

1 个答案:

答案 0 :(得分:2)

如果您将eval()代码设置为自己的模块,那么require时,您可以获得围绕每个模块的module wrapper的好处。模块包装器将全局范围约束到模块。基本上,它是命名空间的一种形式。

所以,如果你只是做

evaluator.js

module.exports = function(funcToCall) {
  eval(funcToCall);
}

app.js

const evaluator = require('evaluator');

evaluator(code);