我正在开发一种工具来帮助教授编程,在某些时候,我正在让客户端将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}
答案 0 :(得分:2)
如果您将eval()
代码设置为自己的模块,那么require
时,您可以获得围绕每个模块的module wrapper
的好处。模块包装器将全局范围约束到模块。基本上,它是命名空间的一种形式。
所以,如果你只是做
module.exports = function(funcToCall) {
eval(funcToCall);
}
const evaluator = require('evaluator');
evaluator(code);