好吧,不完全确定如何说出来,但我会尽我所能。
我一直在尝试使用node的新vm
模块,我想为vm中运行的代码启用Buffer支持。
以下是我使用的初始代码:
let vm = require('vm');
let someCode = '... some unsafe code ...';
let result = vm.runInNewContext(
someCode,
{ Buffer: Buffer }
);
但是,正如我很快发现的那样,这将返回节点进程的Buffer类,因此如果有人要修改vm中的Buffer.prototype
,这也会改变vm之外的Buffer。
因此,在查看the docs之后,我尝试将沙箱对象更改为:
{ Buffer: require('buffer').Buffer }
经过一番检查后,我发现这也不能正常工作,因为需要以某种方式返回同一个对象:
let b = require('buffer').Buffer;
console.log(b === Buffer); // This becomes true
是否可以使用vm创建新的Buffer类,或者我是否需要以某种奇特的方式使用child_process
进一步保护?