有没有办法沙箱一些JavaScript,以便它不能以任何方式将数据发送到服务器

时间:2013-11-14 09:27:31

标签: javascript sandbox

这样做的目的是运行一些用户创建的JavaScript来处理不应该逃离沙箱的敏感数据。我的目的不仅是沙盒正在运行的脚本,还要沙箱处理正在处理的数据。

我可以设置子域或Web worker,并使用sendMessage运行脚本并将结果发回给父级。我可以在iframe上使用新的html5沙箱标志。所有这三种方法都可用于将脚本与父域隔离,但我找不到锁定脚本的方法,以便它无法将数据发送到服务器。

例如,在web worker上运行的脚本可以使用ajax请求,该服务器接受跨域请求以将数据从沙箱中分离出来。

1 个答案:

答案 0 :(得分:1)

您不能为脚本切断任何本地传输。

例如,Worker只能访问一个本机传输XMLHttpRequest(因为无法访问文档 - >没有带src,link,forms的节点),您可以重新定义它,即window.XMLHttpRequest = function () {return 1}并且脚本无法发送数据到服务器。

但是只需运行delete window.XMLHttpRequest,您将设置原生XMLHttpRequest。它工作正常并且处于严格模式(ECMAScript-262 ed.5 / 6)

(function () {

'use strict';

window.XMLHttpRequest = function () {return 1};

console.log(window.XMLHttpRequest);

delete window.XMLHttpRequest;

console.log(window.XMLHttpRequest);

})()

关于HTML5 iframe选项。如果使用sandbox="allow-scripts allow-same-origin allow-pointer-lock"来自iframe的任何脚本都无法发送跨域请求(XMLHttpRequest,postMessage,WebSocket,WebRTC,Server-Sent Events ... any)。如果您需要拒绝跨域请求 - 就是这样。