我需要创建一个沙箱来在浏览器上运行js。我将从用户运行代码,但用户无法运行与页面或浏览器交互的命令(如open或document.getElementById之类的命令)
我认为是这样的:(function(){
var window = null;
var document = null;
var open = null;
(function(){
//user code here
})()
})()
但我不知道是否存在更安全的东西。
答案 0 :(得分:0)
如果您不需要支持旧浏览器(例如IE9或更低版本),那么Web Workers可能是解决此问题的好方法。它们由浏览器自动进行沙盒处理,无法访问DOM。
我创建了一个example JSFiddle that might point you in the right direction。启动它的基础是在页面中有一个脚本,如:
<script id="worker1" type="javascript/worker">
// This script won't be parsed by JS engines
// because its type is javascript/worker.
self.postMessage('I\'m about to run user code.');
// User code goes in here.
</script>
随附的JS代码基本上是:
var blob = new Blob([document.querySelector('#worker1').textContent]);
var worker = new Worker(window.URL.createObjectURL(blob));