从后端检查条件(if-else)没有eval

时间:2017-05-24 08:36:20

标签: javascript node.js eval

我有节点脚本和后端,脚本包含某些数据,它从后端获得了一些条件。

对于前struct node *start

node script

我可以在没有var data={ count: 10, length: 27, days: 3 }; var condition = 'count > 10 && length < 3'; // <=== this condition got from backend if( ... condition ...) { // action 1 } else { // action 2 } 的情况下获得条件结果吗?因为来自后端的数据不利于服务器的安全。或者有没有办法在沙箱中运行这个条件?

2 个答案:

答案 0 :(得分:3)

我的解决方案是使用runInNewContext的简单函数,条件在带有变量的安全隔离沙箱中运行

var vm = require("vm");
function safeEval(code, variables = {}, opts) {
    var sandbox = Object.assign({
        _code_result_: undefined
    }, variables);
    vm.runInNewContext('_code_result_=(' + code + ')', sandbox, opts);
    return sandbox['_code_result_'];
}
var data = {
    count: 10,
    length: 27,
    days: 3
};
var condition = 'count >= 10 && length > 3'; // <=== this condition got from backend
if (safeEval(condition, data)) {
    // action 1
} else {
    // action 2
}

答案 1 :(得分:1)

使用一些评论,这样的事情可能对你有帮助吗?

bigVec.data()