Pure Javascript Sandbox



这是纯javascript沙盒的可能解决方案吗?我愿意执行一个不受信任的代码字符串,而不允许访问DOM、window、this等,但允许用户访问Math、JSON和其他功能。我已经在Chrome上测试过了。

更新:我想提供在服务器上保存用户定义代码的可能性,并使其对其他用户可用。我正在寻找一种方法来拒绝访问该文件,以确保其安全。

function safe(code,args)
{
    if (!args)
        args=[];
    return (function(){
      for (i in window) 
        eval("var "+i+";");
      return function(){return eval(code);}.apply(0,args);
    })();
}

ff=function()
{
    return 3.14;
}
console.log(safe("this;"));//Number
console.log(safe("window;"));//undefined
console.log(safe("console;"));//undefined
console.log(safe("Math;"));//MathConstructor
console.log(safe("JSON;"));//JSON
console.log(safe("Element;"));//undefined
console.log(safe("document;"));//undefined
console.log(safe("Math.cos(arguments[0]);",[3.14]));//-0.9999987317275395
console.log(safe("arguments[0]();",[ff]));//3.14

我在一个旧帖子上提出了这个建议:https://stackoverflow.com/a/11513690/76081

谢谢!

这是不安全的。以下构造将从沙箱中获取全局window对象:

(function(){return this;})()

在这一点上,你可以从中提取任何你想要的东西,包括像document这样的好东西。

T.J.Crowder在https://stackoverflow.com/a/2673780/149341他在信中描述了这种利用。

相关内容

  • 没有找到相关文章

最新更新