博客
关于我
NPM酷库:vm2,安全的沙箱环境
阅读量:799 次
发布时间:2023-04-17

本文共 1254 字,大约阅读时间需要 4 分钟。

NPM酷库,每天两分钟,了解一个流行NPM库。今天我们要深入了解vm2,这是一个专为Node.js官方vm库设计的安全替代品,主要解决了前者在沙箱环境中的安全问题。

在Node.js标准库中,vm模块用于在V8虚拟机环境中执行JavaScript代码。其最初设计目的是创建一个沙箱,用于安全执行不受信任的JavaScript代码。然而,随着时间的推移,发现该实现存在严重的安全漏洞。例如,当允许用户提交执行脚本时,攻击者可以轻松突破沙箱环境,获取主程序的上下文,进而控制整个程序的运行。如下代码所示:

const vm = require('vm');vm.runInNewContext('this.constructor.constructor("return process")().exit()');console.log('Never gets executed.');

此代码在运行时,会立即调用process.exit(),导致主程序异常终止。其背后的原理是,vm库的沙箱环境与主程序共享同一个上下文环境,攻击者可以通过构造特定的代码,获取主程序的关键函数和全局变量,从而对程序造成严重威胁。

为解决这一问题,开发者引入了vm2库。vm2重新构建了Node.js沙箱环境,采用更安全的方式隔离代码运行环境。其主要特性包括:

  • 支持在沙箱中安全执行不受信任的JavaScript代码
  • 可控的终端输出,防止信息泄露
  • 可选的模块加载限制
  • 安全的回调传递机制
  • 防止死循环攻击

vm2的核心原理是基于JavaScript的Proxy技术,通过动态代理机制,防止沙箱内的代码从主程序获取不允许的资源。这种方式实现了对沙箱环境的严格隔离,有效提升了安全性。例如:

const { VM } = require('vm2');const vm = new VM({    timeout: 1000,    sandbox: {}});vm.run(`process.exit()`); // TypeError: process.exit is not a function

此代码会抛出TypeError,因为在vm2的沙箱中,process并非主程序的全局对象。这种方式确保了沙箱内的代码无法直接访问主程序的资源,或干扰其正常运行。

如果你对vm2感兴趣,可以通过以下方式进一步学习:

• 了解其源码:[GitHub仓库](https://github.com/leeb1(vm2))

• 试验自己的代码:[文档与示例](https://vm2.js.org/docs)

• 加入社区交流:[Discord或论坛](https://vm2.js.org/community)

NPM酷库,每天两分钟,了解一个流行NPM库。今天我们深入探讨了vm2库,了解了它如何解决Node.js官方vm库的安全问题。如果你对安全性有更高的要求,或者需要在生产环境中安全执行不受信任的代码,vm2无疑是一个值得推荐的选择。

转载地址:http://ltgfk.baihongyu.com/

你可能感兴趣的文章
Mysql中存储引擎简介、修改、查询、选择
查看>>
Mysql中存储过程、存储函数、自定义函数、变量、流程控制语句、光标/游标、定义条件和处理程序的使用示例
查看>>
mysql中实现rownum,对结果进行排序
查看>>
mysql中对于数据库的基本操作
查看>>
Mysql中常用函数的使用示例
查看>>
MySql中怎样使用case-when实现判断查询结果返回
查看>>
Mysql中怎样使用update更新某列的数据减去指定值
查看>>
Mysql中怎样设置指定ip远程访问连接
查看>>
mysql中数据表的基本操作很难嘛,由这个实验来带你从头走一遍
查看>>
Mysql中文乱码问题完美解决方案
查看>>
mysql中的 +号 和 CONCAT(str1,str2,...)
查看>>
Mysql中的 IFNULL 函数的详解
查看>>
mysql中的collate关键字是什么意思?
查看>>
MySql中的concat()相关函数
查看>>
mysql中的concat函数,concat_ws函数,concat_group函数之间的区别
查看>>
MySQL中的count函数
查看>>
MySQL中的DB、DBMS、SQL
查看>>
MySQL中的DECIMAL类型:MYSQL_TYPE_DECIMAL与MYSQL_TYPE_NEWDECIMAL详解
查看>>
MySQL中的GROUP_CONCAT()函数详解与实战应用
查看>>
MySQL中的IO问题分析与优化
查看>>