这样做的目的是运行一些用户创建的JavaScript,它处理不应该脱离沙箱的敏感数据。我在这里的目的不仅是对正在运行的脚本进行沙箱化,而且还要对它正在处理的数据进行沙箱化。
我可以设置子域或web工作者,并使用sendMessage运行脚本并将结果发回给父域。我可以在iframe上使用新的html5沙箱标志。所有这三种方法都可以用于将脚本与父域隔离开来,但我无法找到锁定脚本的方法,以便它不能将数据发送到服务器。
例如,运行在worker上的脚本可以与接受跨域请求的服务器一起使用ajax请求将数据从沙箱中分离出来。
发布于 2013-11-14 10:06:27
您不能切断脚本的任何本地传输。
例如,工作者只能访问一个本机传输XMLHttpRequest(因为没有对文档->的访问-没有带有src、链接、窗体的节点),而且您可以重新定义它--即window.XMLHttpRequest = function () {return 1}和脚本不能将数据发送到服务器。
但是只要运行delete window.XMLHttpRequest,您就可以设置本地XMLHttpRequest。它工作良好,并在严格的模式(ECMAScript-262编辑。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、服务器发送的Events...any)。如果您需要拒绝跨域请求--就是这样。
https://stackoverflow.com/questions/19973894
复制相似问题