【问题标题】:How to evaluate a javascript string and call functions from it (Without window)如何评估 javascript 字符串并从中调用函数(无窗口)
【发布时间】:2017-03-02 20:01:06
【问题描述】:

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

我现在在做什么:

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

var result = userFunctionA(param1, param2);

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

这是我找到的最好的参考,但他们非常关心“窗口”,因为我的是节点服务器,我没有窗口,我不能使用建议的 iFrame 或工作人员:Is it possible to restrict the scope of a javascript function?

注意:我正在寻找一种解决方案,该解决方案不需要我在阅读之前将他们的代码字符串分解为函数,因为这会导致无法学习以下内容:

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

【问题讨论】:

    标签: javascript node.js server


    【解决方案1】:

    如果您将eval() 代码设为自己的模块,那么您将受益于module wrapperrequire'd 时围绕每个模块的好处。模块包装器将全局范围限制为模块。基本上,它是一种命名空间。

    所以如果你只是这样做

    evaluator.js

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

    app.js

    const evaluator = require('evaluator');
    
    evaluator(code);
    

    【讨论】:

      猜你喜欢
      • 2020-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-23
      • 2019-04-22
      • 1970-01-01
      相关资源
      最近更新 更多