问题标签 [node-vm2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
226 浏览

node.js - 结合 NodeJS Fibers + VM Sandbox

我想在 Node 中运行一些不受信任的代码,如下所示:

使用 Fibers,我得到了按预期工作的同步行为:

困难在于如何对代码进行沙箱化。不得不使用 Fibers 让事情变得非常复杂。我不确定如何开始。如何使用vm2将上述沙盒化?例如,以下显然行不通:

(它不起作用,因为VMgreen_ledsleep的沙盒代码不可见)。

这应该怎么做?任何一个...

  1. 也许一切都应该在虚拟机内部运行,包括光纤和实现green_led等?
  2. 或者最好让VM运行的代码最小化,而不是以某种方式白名单/代理green_ledsleep?在灰质上并不容易,首先要理解纤维是如何工作的已经够难的了!
0 投票
0 回答
397 浏览

node.js - 在节点 vm2 中运行“module.exports = function(foo){...}”

我是 Node 和虚拟机vm2的新手。在后者的文档中,它给出了一个用法示例:

问题:这实际上在做什么?

首先,为什么要module.exports在这里使用?即,为什么不将其省略如下?

其次,另一种看待它的方式:在常规节点编程中,require(inc)在一个文件中分配给变量是初学者的知识,在另一个文件中(由 选择inc)分配给module.exports. 这与上面的用法有什么不同vm2

具体来说:require(...)在上面是否被隐式调用?如何在一个沙箱中定义(如上)和引用多个模块?

甚至很难知道要问什么问题——真的,我只是希望能解释一下可以与常规节点编程不同的方式module.exports使用vm2的方式,突出差异。

0 投票
1 回答
1053 浏览

node.js - 如何结束 Node VM2 当前正在运行的任何代码

我正在使用vm2在 Node 中运行一些沙盒代码。

正在运行的代码将主要是异步的。它是不受信任的代码,不能以任何方式依赖它——因此我使用vm2它来运行它。

vm2 是否有办法结束当前正在执行的任何代码?文档非常有限。例如,如果我有这个代码:

code有没有什么办法可以运行上面的代码,并在将来的某个时候停止它,而控制代码不必知道任何关于code.

我找不到vm.stop()方法或类似方法。

0 投票
1 回答
2008 浏览

node.js - 如何获取 Node vm2 运行的代码的结果

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

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

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

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

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

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

实际执行

0 投票
1 回答
1362 浏览

node.js - Nodejs vm2 - 如何导入脚本

假设您有脚本 A: 定义了一个库:

你有脚本 B: 以某种方式重用 MathFunctions:

并且你想在 vm 上下文中执行 B,导入 A。

使用不受信任的代码执行此操作的最佳方法是什么?

类似的问题在这里:https ://github.com/patriksimek/vm2/issues/121

0 投票
1 回答
1300 浏览

node.js - NodeJS VM2设置为“重定向”时访问控制台的正确方法

我正在使用VM2包来运行用户代码。我正在尝试拦截控制台输出并将 NodeVM 对象的控制台属性设置为“重定向”:

根据将控制台输出重定向到“事件”的文档。我是 NodeJS 的新手,我如何挂钩这些事件以捕获在沙箱内执行的 console.log 消息?

0 投票
0 回答
792 浏览

javascript - nodeJS 使代码在隔离的 vm 上下文中运行或创建特定的全局变量

在我现在正在处理的项目中,我需要为连接到 TCP 服务器的每个客户端提供不同的上下文...我将在隔离上下文中在 VM 上运行的代码

为了更清楚我需要做什么:

- 应用程序的主要组件是核心,应用程序的每个部分都扩展了核心......

-核心需要访问会话对象(现在作为参数)

- 在出现在服务器上的每个连接上,我需要创建一个新会话来处理客户端数据,如登录名、套接字、会话 ID 等......现在我必须通过参数将会话传递给每个新实例继承自核心...

或者

以某种方式创建一个仅存在于新客户端实例中的全局变量,它将处理会话对象,该对象应该可以递归访问我将在客户端实例中调用的所有内容。

0 投票
1 回答
835 浏览

javascript - NodeJS 虚拟机用例

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

在阅读了一些关于这个模块的文档之后,看起来就像是一种很好的 eval 方式。

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

0 投票
1 回答
1015 浏览

node.js - Node.js vm2 exchanging information between VM and main code using functions

I am using the vm2 module, and I have some code with two functions: get_input() for getting some data that I have, and display() for showing some data, but these functions will not be defined in that code. How do I make some sort of external function that can run the get_input() to give data from an array and output some data to my main code with the display() function? Basically I want to do this:

  • Code running in vm2 makes a get_input() call
  • Data from an array gets sent to that function
  • Data is evaluated with code in the vm2 instance
  • vm2 code makes a display() call which outputs data to another array on my main code

Any help would be appreciated.

0 投票
1 回答
575 浏览

node.js - 在worker_threads中使用vm2时,是否可以在worker之间共享一个NodeVM实例?

我正在使用worker_threadsvm2实现类似无服务器的东西,但是我无法在主线程中获取 NodeVM 实例,然后通过 workData(由于worker_threads的限制),所以我只能new NodeVM在每个请求的工作线程中,在其中我无法重用 vm 实例,成本会受到影响。

完成需要 200 ~ 450 ms ,new NodeVM()所以我希望预先初始化一个可重用的实例。

有人可以给我一些建议吗?

非常感谢。