是否可以通过覆盖各种函数(如alert、window.location和eval )来沙箱用户提交的Javascript
我不是在寻找一个完美的解决方案。我相信有些人仍然会找到一种重新排列div的方法来拼写脏话或恶意的东西,但如果我能100%可靠地禁用页面重定向,我会很高兴。
我在Chrome中尝试过,做了一些类似这样的事情
context={}; //use this to prevent `this` from being `window`
context.f=function(){
var window=null,location=null,eval=function(){};
console.log(window); //also the other two
};
context.f();看起来很有希望。如果我用用户提交的代码替换console行(检查paren平衡),这是一个非常糟糕的想法还是稍微糟糕的想法?在Chrome上,我仍然可以通过this来运行并重新定义东西,但这对我来说是可以接受的。
发布于 2011-02-19 01:41:18
您可以使用Microsoft Web Sandbox或Google Caja。
发布于 2013-01-21 16:56:54
这里还有两个可能的解决方案(免责声明:我自己才刚刚开始寻找,所以我不是专家)。
这非常有趣,使用web worker来沙箱不受信任的代码:
https://github.com/eligrey/jsandbox
尽管如此,我想知道是否会继续维护它,或者下面的html5“沙盒”iframe属性是否会取代它:
http://www.w3schools.com/html5/att_iframe_sandbox.asp
发布于 2013-08-23 02:12:35
vm.js是一个用纯coffeescript实现的javascript虚拟机(应该在相对较旧的浏览器中运行),可以用作轻量级的进程内沙箱。它可以打破无限循环,保护全局对象不被修改。
https://stackoverflow.com/questions/5044608
复制相似问题