gpt4 book ai didi

javascript - 在沙箱中的服务器上运行不受信任的 javascript 代码

转载 作者:搜寻专家 更新时间:2023-10-31 23:58:37 24 4
gpt4 key购买 nike

我似乎无法弄清楚如何设置 Node 沙箱,它可以安全地运行不受信任的代码,并允许用户通过 api 调用与程序交互(系统输入和输出)。我正在尝试在浏览器中设置一个控制台,供用户从服务器运行他们自己的代码。

是否有支持此功能的 Node 包,或者我是否需要编写自己的 Node 虚拟机?谢谢。

编辑:我希望用户能够编写 readline() 并让程序在断点处等待数据传输进来。类似地 console.log() 的输出应该重定向到输入 api 调用的响应。

最佳答案

您可以使用 vm2模块并以安全的方式运行几乎所有随用户输入而来的代码。

您甚至可以定义用户提供的代码是否可以通过相对路径访问 native Node 模块或其他模块,甚至可以定义来自用户输入的代码是否可以进行外部调用。

您可以在 try/catch 中封装并执行此“不可信”代码,以观察灾难性故障,甚至可以设置超时,以免此运行不堪重负。

快速示例

const {VM} = require('vm2');
const vm = new VM();

vm.run(`process.exit()`); // TypeError: process.exit is not a function

使用“请求”模块“bultin”访问外部资源

const {NodeVM} = require('vm2');
const vm = new NodeVM({
require: {
external: true // allow all modules or use Array for one e.g: ['request']
}
});

vm.run(`
var request = require('request');
request('http://www.google.com', function (error, response, body) {
console.error(error);
if (!error && response.statusCode == 200) {
console.log(body) // Show the HTML for the Google homepage.
}
})
`, 'vm.js');

默认情况下,条目被编译成 javascript,但您可以使用自定义编译器传递一个函数。

关于javascript - 在沙箱中的服务器上运行不受信任的 javascript 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45767337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com