代码拉取完成,页面将自动刷新
A more secure multi thread sandbox for NodeJS
VM Guard
是基于VM2
的NodeJS
沙箱环境,用于解决一些在VM2
中不能解决的问题
VM2
不同的特征
VM2
是一款作用于Javascript
的沙箱环境(开源地址)
timeout
(超时)可遏制在 NodeJS
环境下 VM2
所不能解决的恶意代码,如:
while (true) {}
Linux
)VM2
仅支持 NodeJS
环境(浏览器环境的支持可能需要使用到 Worker
, 敬请期待)VM2
的兼容VM Guard
可以使用所有 VM2
中 NodeVM
的配置选项
选项名 | 默认值 | 描述 |
---|---|---|
concurrency |
2 |
并发数量 |
timeout |
1000 |
包含异步/同步操作的超时时间(单位 ms) |
memoryQuota |
100 |
最大能使用的内存(单位 m) |
cpuQuota |
0.5 |
cpu 资源配额(百分比) |
npm i vm-guard --save
const { VmGuard } = require('vm-guard');
(async () => {
const vm = new VmGuard({
sandbox: {
a: ' test'
}, // vm2 的 options
concurrency: 2 // 并发限制
});
try {
await Promise.all([
// 以下输出由于在多线程下,不会以特定顺序输出
vm.run('console.log(\'1\' + a)'),
vm.run('console.log(\'2\' + a)'),
vm.run('console.log(\'3\' + a)'),
vm.run('console.log(\'4\' + a)'),
vm.run('console.log(\'5\' + a)'),
// 运行恶意代码会导致超时
vm.run(`
while(true){}
`)
]);
} catch (e) {
// 捕获超时或其它异常
console.log(e);
}
// 也可以在一段时间后运行,其子进程会自动管理,调度
setTimeout(() => {
vm.run('console.log(\'6\' + a)');
vm.run('console.log(\'17\' + a)');
vm.run('console.log(\'18\' + a)');
}, 2000);
})();
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。