1

可能重复:
如何在 node.js 沙箱中安全地运行用户提交的脚本?

我希望我的用户可以创建自己的与特定对象一起使用的格式函数。我找到了两种方法,但我不知道这些功能是否可以被黑客入侵。它在 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

该示例也可在http://jsfiddle.net/DeWYy/2/获得

4

1 回答 1

1

两者都很脆弱,因为你实际上是让任何人在没有任何控制的情况下运行任何东西。

您可能想要做的是在沙箱中运行代码。有一些库可以帮助您解决这个问题(快速谷歌搜索提供了Sandbox)。请注意,即使您在沙箱中运行用户提交的代码,也总会存在风险,但它们大多都得到了缓解。因此,除非您运行关键服务,否则它可以被认为是安全的。

我还建议您查看有关安全运行用户提交的代码的问题。

于 2012-10-05T15:30:10.743 回答