0

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

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

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

4

1 回答 1

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)。如果您需要拒绝跨域请求 - 就是这样。

于 2013-11-14T10:06:27.990 回答