可能重复:
How to run user-submitted scripts securely in a node.js sandbox?
我希望我的用户可以创建自己的格式函数来处理特定对象。我找到了两种方法,但我不知道这些功能是否可以被黑客入侵。它在nodeJS中运行。
//First way with eval (evil ?)
function convertObj(formula) {
return function (obj) {
return eval(formula);
};
}
// Second way with function (same as eval ?)
function convertObj2(formula) {
return new Function("obj", "return " + formula);
}
var inst = {
"name": "BOB",
"age": "30"
};
var formula = "obj.name.toLowerCase() + ' is ' + obj.age + ' years old'";
var next = convertObj(formula);
var next2 = convertObj2(formula);
document.write('<p>' + next(inst) + '</p>');
document.write('<p>' + next2(inst) + '</p>');
打印
bob is 30 years old
bob is 30 years old
处获得
答案 0 :(得分:1)
两者都很脆弱,因为你实际上是在没有任何控制权的情况下让任何人无所事事。
您可能想要做的是在沙箱中运行代码。有一些图书馆可以帮助您(快速谷歌搜索Sandbox)。请注意,即使您在沙箱中运行用户提交的代码,也总会存在风险,但它们大多都会被缓解。因此,除非您运行关键服务,否则可以认为是安全的。
我还建议您查看有关安全运行用户提交的代码的问题。