这样做的目的是运行一些用户创建的JavaScript来处理不应该逃离沙箱的敏感数据。我的目的不仅是沙盒正在运行的脚本,还要沙箱处理正在处理的数据。
我可以设置子域或Web worker,并使用sendMessage运行脚本并将结果发回给父级。我可以在iframe上使用新的html5沙箱标志。所有这三种方法都可用于将脚本与父域隔离,但我找不到锁定脚本的方法,以便它无法将数据发送到服务器。
例如,在web worker上运行的脚本可以使用ajax请求,该服务器接受跨域请求以将数据从沙箱中分离出来。
答案 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)。如果您需要拒绝跨域请求 - 就是这样。