标签: nodevm

NodeJS vm 用例

我对 NodeJS 中 VM 模块的用例感到困惑。

在阅读了有关此模块的文档中的一些内容后,它看起来像是一种进行 eval 的奇特方式。

有没有人使用过它并活着告诉尾巴它的用例?

javascript node.js nodevm node-vm2

6
推荐指数
1
解决办法
770
查看次数

是否可以使所有 Node.js 全局变量在 Node 的 VM 上下文中可用?

考虑以下代码:

vm = require('vm');
context = vm.createContext({});
vm.runInContext("Buffer.from('abc').toString()", context);
Run Code Online (Sandbox Code Playgroud)

请注意,这会生成ReferenceError: Buffer is not definedBuffer ,它是 Node.js 特定的构造,Node.js 已将其添加为Node Specific Global Object(请注意,其他 JS 全局变量喜欢MathArray不存在此问题。) 可以通过将上述代码修改为

vm = require('vm');
context = vm.createContext({Buffer});
vm.runInContext("Buffer.from('abc').toString()", context);
Run Code Online (Sandbox Code Playgroud)

但是,如果我希望导入每个节点特定全局,那么似乎我必须将它们一一列出。鉴于 Node.js 相对频繁地添加 Global 对象,有没有办法可以将 Node.JS 的所有全局对象传递到 vm 上下文?或者,是否有一种编程方式来构造所有节点全局列表?

注意:global不同节点版本之间的使用不一致:例如,Buffer适用global于节点 v8 和 v10,但不适用于 v12。

node.js nodevm

6
推荐指数
1
解决办法
852
查看次数

如何获取Node vm2运行代码的结果

最近,我一直在尝试使用vm2包来实现沙箱执行@Patrik \xc5\xa0imek 发布的

\n\n

我正在尝试运行一些 js 代码,我认为它是自定义逻辑,我将此逻辑存储在一个字符串变量中。

\n\n

我需要在沙箱环境中执行此自定义逻辑(因为这是不可信代码),并在实际环境中获取响应,以便根据此结果继续正常的应用程序流程。

\n\n

我尝试了多种方法才得到最终结果。自定义逻辑在沙箱内成功执行,但我无法找到一种方法将此结果发送回主进程,但我得到的结果为未定义。因此,到目前为止,还没有任何效果。

\n\n

希望我在这里得到一些答案。

\n\n

自定义逻辑(将存储在字符串中)

\n\n
function addValues(a,b){\n   var c = a + b;\n   console.log(\'Addition of 2 values\');\n   console.log(c); \n   return c;\n}\n\naddValues(10,10); // function call\n
Run Code Online (Sandbox Code Playgroud)\n\n

实际实施

\n\n
// vm2 \n const {NodeVM} = require(\'vm2\');\n        const vm = new NodeVM({\n            console: \'inherit\',\n            sandbox: {},\n            require: {\n                external: true,\n                builtin: [\'fs\',\'path\'],\n                root: "./",\n                mock: {\n                    fs: {\n                        readFileSync() { return \'Nice try!\';}\n                    }\n                },\n …
Run Code Online (Sandbox Code Playgroud)

node.js nodevm node-vm2

5
推荐指数
1
解决办法
3150
查看次数

标签 统计

node.js ×3

nodevm ×3

node-vm2 ×2

javascript ×1