如何禁止从JS访问DOM

时间:2014-02-05 05:09:37

标签: javascript dom

我需要创建一个沙箱来在浏览器上运行js。我将从用户运行代码,但用户无法运行与页面或浏览器交互的命令(如open或document.getElementById之类的命令)

我认为是这样的:

(function(){
   var window = null;
   var document = null;
   var open = null;
   (function(){
       //user code here
   })()
})()

但我不知道是否存在更安全的东西。

1 个答案:

答案 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));