有没有办法对一些javascript进行沙盒处理,这样它就不能以任何方式将数据发送到服务器

Is there any way to sandbox some javascript so that it can not in any way send data to a server

本文关键字:何方 任何方 就不能 服务器 数据 javascript 处理 有没有      更新时间:2023-09-26
这样做

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

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

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

不能切断脚本的任何本机传输。

例如,Worker 只能访问一个本机传输 XMLHttpRequest(因为无法访问文档 ->没有带有 src、链接、表单的节点),您可以重新定义它,即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...任何)。如果您需要拒绝跨域请求 - 就是这样。