问题标签 [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.
node.js - 结合 NodeJS Fibers + VM Sandbox
我想在 Node 中运行一些不受信任的代码,如下所示:
使用 Fibers,我得到了按预期工作的同步行为:
困难在于如何对代码进行沙箱化。不得不使用 Fibers 让事情变得非常复杂。我不确定如何开始。如何使用vm2将上述沙盒化?例如,以下显然行不通:
(它不起作用,因为VMgreen_led
中sleep
的沙盒代码不可见)。
这应该怎么做?任何一个...
- 也许一切都应该在虚拟机内部运行,包括光纤和实现
green_led
等? - 或者最好让VM运行的代码最小化,而不是以某种方式白名单/代理
green_led
和sleep
?在灰质上并不容易,首先要理解纤维是如何工作的已经够难的了!
node.js - 在节点 vm2 中运行“module.exports = function(foo){...}”
我是 Node 和虚拟机vm2的新手。在后者的文档中,它给出了一个用法示例:
问题:这实际上在做什么?
首先,为什么要module.exports
在这里使用?即,为什么不将其省略如下?
其次,另一种看待它的方式:在常规节点编程中,require(inc)
在一个文件中分配给变量是初学者的知识,在另一个文件中(由 选择inc
)分配给module.exports
. 这与上面的用法有什么不同vm2
?
具体来说:require(...)
在上面是否被隐式调用?如何在一个沙箱中定义(如上)和引用多个模块?
甚至很难知道要问什么问题——真的,我只是希望能解释一下可以与常规节点编程不同的方式module.exports
使用vm2
的方式,突出差异。
node.js - 如何结束 Node VM2 当前正在运行的任何代码
我正在使用vm2在 Node 中运行一些沙盒代码。
正在运行的代码将主要是异步的。它是不受信任的代码,不能以任何方式依赖它——因此我使用vm2
它来运行它。
vm2 是否有办法结束当前正在执行的任何代码?文档非常有限。例如,如果我有这个代码:
code
有没有什么办法可以运行上面的代码,并在将来的某个时候停止它,而控制代码不必知道任何关于code
.
我找不到vm.stop()
方法或类似方法。
node.js - 如何获取 Node vm2 运行的代码的结果
最近,我一直在尝试使用@Patrik Šimek 发布的包vm2来实现沙箱执行
我正在尝试运行一些 js 代码,我认为它是自定义逻辑,我将此逻辑存储在字符串变量中。
我需要在沙盒环境中执行这个自定义逻辑(因为这是不可信的代码),并在实际环境中取回响应,以根据这个结果继续正常的应用程序流程。
我尝试了几种方法来获得最终结果。自定义逻辑正在沙箱内成功执行,但我无法找到将此结果发送回主进程的方法,但我得到的结果为undefined。因此,到目前为止没有任何效果。
希望我能在这里得到一些答案。
自定义逻辑(将存储在字符串中)
实际执行
node.js - Nodejs vm2 - 如何导入脚本
假设您有脚本 A: 定义了一个库:
你有脚本 B: 以某种方式重用 MathFunctions:
并且你想在 vm 上下文中执行 B,导入 A。
使用不受信任的代码执行此操作的最佳方法是什么?
node.js - NodeJS VM2设置为“重定向”时访问控制台的正确方法
我正在使用VM2包来运行用户代码。我正在尝试拦截控制台输出并将 NodeVM 对象的控制台属性设置为“重定向”:
根据将控制台输出重定向到“事件”的文档。我是 NodeJS 的新手,我如何挂钩这些事件以捕获在沙箱内执行的 console.log 消息?
javascript - nodeJS 使代码在隔离的 vm 上下文中运行或创建特定的全局变量
在我现在正在处理的项目中,我需要为连接到 TCP 服务器的每个客户端提供不同的上下文...我将在隔离上下文中在 VM 上运行的代码
为了更清楚我需要做什么:
- 应用程序的主要组件是核心,应用程序的每个部分都扩展了核心......
-核心需要访问会话对象(现在作为参数)
- 在出现在服务器上的每个连接上,我需要创建一个新会话来处理客户端数据,如登录名、套接字、会话 ID 等......现在我必须通过参数将会话传递给每个新实例继承自核心...
或者
以某种方式创建一个仅存在于新客户端实例中的全局变量,它将处理会话对象,该对象应该可以递归访问我将在客户端实例中调用的所有内容。
javascript - NodeJS 虚拟机用例
我对 NodeJS 中 VM 模块的用例感到困惑。
在阅读了一些关于这个模块的文档之后,看起来就像是一种很好的 eval 方式。
有人用过它并活着告诉尾巴它的用例吗?
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.
node.js - 在worker_threads中使用vm2时,是否可以在worker之间共享一个NodeVM实例?
我正在使用worker_threads
并vm2
实现类似无服务器的东西,但是我无法在主线程中获取 NodeVM 实例,然后通过 workData(由于worker_threads
的限制),所以我只能new NodeVM
在每个请求的工作线程中,在其中我无法重用 vm 实例,成本会受到影响。
完成需要 200 ~ 450 ms ,new NodeVM()
所以我希望预先初始化一个可重用的实例。
有人可以给我一些建议吗?
非常感谢。