VM2可选对象冻结功能:能否按需关闭高等级上下文隔离机制?
VM2隔离等级调整相关说明
VM2 支持自定义调整隔离严格等级,不需要强制使用默认的最高限制配置,你可以根据自己的场景选择关闭部分高限制特性。
常用可调配置项
freeze:默认值为true,开启时会冻结所有内置对象,若不需要该限制直接设置为false即可,上下文对象会恢复正常的可修改权限strict:默认值为true,控制沙箱是否强制运行在严格模式下,简单场景下可关闭以降低运行限制useProxies:部分版本VM2提供该配置,默认true,如果不需要Proxy代理包装机制,可设置为false完全关闭代理隔离(注意该操作会大幅降低沙箱安全性,仅建议运行完全可信代码时开启)
配置示例
const { NodeVM } = require('vm2'); // 低隔离等级的VM实例配置,仅保留基础的上下文隔离能力 const lowRestrictionVM = new NodeVM({ freeze: false, strict: false, sandbox: { // 自定义传入沙箱的全局变量 appConfig: { version: '1.0.0' } } }); // 运行测试代码 lowRestrictionVM.run(` appConfig.version = '1.1.0'; // 关闭freeze后可正常修改传入的对象属性 console.log(appConfig.version); `);
注意事项
关闭高限制特性仅建议在沙箱运行代码完全可信的场景下使用,如果需要运行外部不可信代码,不建议调整默认的高限制配置,否则会大幅提升沙箱逃逸的风险。
内容的提问来源于stack exchange,提问作者sky master
相关产品推荐
相关产品推荐

