1 Star 0 Fork 0

苍石 / vm-guard

加入 Gitee
与超过 800 万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
readme.md

VM Guard for NodeJS

A more secure multi thread sandbox for NodeJS

VM Guard 是基于 VM2NodeJS 沙箱环境,用于解决一些在 VM2 中不能解决的问题

VM2 不同的特征

VM2 是一款作用于 Javascript 的沙箱环境(开源地址

  1. 多线程增加运行沙箱代码的运行速率
  2. 新增 timeout (超时)可遏制在 NodeJS 环境下 VM2 所不能解决的恶意代码,如:
    while (true) {}
  3. 可以限定每个线程的 CPU 或者 内存 占用(仅支持 Linux
  4. VM2 仅支持 NodeJS 环境(浏览器环境的支持可能需要使用到 Worker, 敬请期待)

VM2 的兼容

  • VM Guard 可以使用所有 VM2NodeVM 的配置选项
  • 除此之外提供以下额外选项
    选项名 默认值 描述
    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);


})();

Documentation Details

https://github.com/canguser/vm-guard/blob/master/docs

简介

A safer VM framework 展开 收起
TypeScript 等 2 种语言
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
TypeScript
1
https://gitee.com/HGJing/vm-guard.git
git@gitee.com:HGJing/vm-guard.git
HGJing
vm-guard
vm-guard
master

搜索帮助