最近,我一直在尝试使用@Patrik Šimek 发布的包vm2来实现沙箱执行
我正在尝试运行一些 js 代码,我认为它是自定义逻辑,我将此逻辑存储在字符串变量中。
我需要在沙盒环境中执行这个自定义逻辑(因为这是不可信的代码),并在实际环境中取回响应,以根据这个结果继续正常的应用程序流程。
我尝试了几种方法来获得最终结果。自定义逻辑正在沙箱内成功执行,但我无法找到将此结果发送回主进程的方法,但我得到的结果为undefined。因此,到目前为止没有任何效果。
希望我能在这里得到一些答案。
自定义逻辑(将存储在字符串中)
function addValues(a,b){
var c = a + b;
console.log('Addition of 2 values');
console.log(c);
return c;
}
addValues(10,10); // function call
实际执行
// vm2
const {NodeVM} = require('vm2');
const vm = new NodeVM({
console: 'inherit',
sandbox: {},
require: {
external: true,
builtin: ['fs','path'],
root: "./",
mock: {
fs: {
readFileSync() { return 'Nice try!';}
}
},
wrapper : ""
}
});
// Sandbox function
let functionInSandbox = vm.run("module.exports = function(customLogic){
customLogic //need to execute this custom logic
});
// Make a call to execute untrusty code by passing it as an argument
// to sandbox environment and obtain the result
var resultOfSandbox = functionInSandbox(customLogic);
console.log("Result of Sandbox :");
console.log(resultOfSandbox); // undefined (need to get the result of custom logic execution)