我有节点脚本和后端,脚本包含某些数据,它从后端获得了一些条件。
对于前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
}
的情况下获得条件结果吗?因为来自后端的数据不利于服务器的安全。或者有没有办法在沙箱中运行这个条件?
答案 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()