安全地评估用户定义的计算

时间:2014-05-11 07:54:03

标签: javascript security

我需要允许用户定义的计算,这些计算存储为字符串。通过用实际值替换变量,在执行之前动态解析公式。

在此上下文中,只有属于同一客户帐户的人才可能相互注入恶意代码,例如:一个流氓员工攻击同事,这已经够糟糕了。

我能想到的例子(我相信还有更多):

"{x} * {y} * function() {...}()"
"{x} * {y} * eval(...)"

// replace variables

eval( "above input strings" )

现在我正在寻找有关如何确保这一点的想法。首先要降低运行eval()的风险需要什么,或者是否有不需要编写复杂解析器的替代方法?

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,我需要运行由第三方编写的不受信任的javascript。如果您只是想让它变得简单,您可以使用WebWorker,它会生成一个单独的线程,该线程无法访问全局变量,如window

注意:WebWorker需要HTML5。

创建“worker.js”文件:

self.onmessage = function(e) {
    postMessage(eval(e.data));
};

然后在你的主要javascript文件中:

var worker = new Worker('worker.js');
worker.onmessage = function(e) {
    alert('The answer is ' + e.data);
    worker.terminate(); // to free up the resources
};
var my_already_parsed_function = '3+5+6';
worker.postMessage(my_already_parsed_function);