纯Javascript沙盒

纯Javascript沙盒,javascript,sandbox,trusted-vs-untrusted,Javascript,Sandbox,Trusted Vs Untrusted,这是纯javascript沙盒的可能解决方案吗? 我愿意执行不受信任的代码字符串,而不允许访问DOM、window、this等,但允许用户访问Math、JSON和其他功能。 我已经在Chrome上测试过了 更新: 我希望能够在服务器上保存用户定义的代码,并将其提供给其他用户。为了安全起见,我正在寻找一种拒绝访问文档的方法 function safe(code,args) { if (!args) args=[]; return (function(){

这是纯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
我在一篇旧文章中提出:


谢谢

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

(function(){return this;})()
在这一点上,您可以从中提取任何您想要的内容,包括像
文档
这样的好东西


T.J.Crowder在其回答中描述了此漏洞。

我认为如果存在实际的敏感/有价值的信息存在风险,部署类似的任何东西都是疯狂的。您能详细说明一下为什么需要此漏洞吗?我可以打开chrome控制台,重新定义任何东西。我不知道如果没有ActiveX之类的东西,如何确保在浏览器中运行的客户端javascript的安全。@Pointy:首先,我问它这应该适合作为解决方案。请,你能更具建设性地发表你的评论吗?@Perry Tew:我愿意从服务器加载一些用户代码,并允许它在浏览器中运行,而不允许访问DOM、窗口、此。。。等等。不可能保护任何人不受客户端上其他DOM/JS环境的影响。他们所要做的就是
(function(){/*这里面是全局窗口*/})()