gpt4 book ai didi

javascript - 纯 Javascript 沙盒

转载 作者:行者123 更新时间:2023-12-02 19:30:54 28 4
gpt4 key购买 nike

这是纯 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;})()

此时,您可以从中提取任何您想要的内容,包括像文档这样的好东西。

向 T.J. 致敬克劳德在 https://stackoverflow.com/a/2673780/149341 上的回答他在其中描述了这一漏洞。

关于javascript - 纯 Javascript 沙盒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11513747/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com