问题标签 [nodevm]

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 投票
1 回答
2008 浏览

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

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

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

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

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

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

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

实际执行

0 投票
2 回答
346 浏览

node.js - 停止承诺链或停止 runInNewContext 返回承诺链

我在vm使用runInNewContext.

自定义代码可以返回一个可能是嵌套的并且可以具有嵌套调用堆栈的承诺。代码如下所示

现在的问题是,如果承诺的处理时间超过 20 秒,我想停止处理。

如果代码是递归的并且带有嵌套的 Promise,它会在 20 秒内被堆叠,但现在尝试执行调用堆栈,这需要超过几分钟并且不可停止,最后会出现堆栈溢出问题。

我尝试添加以下Promise.race

它有点像将控制权排除在功能之外,但是承诺链会继续执行。

有没有办法停止codePromise?或在等待中超时?

0 投票
1 回答
1362 浏览

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

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

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

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

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

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

0 投票
0 回答
234 浏览

node.js - 节点 VM 和异步函数

考虑以下使用节点 vm 调用异步函数的节点代码:

代码的输出为:1, 2, END, 3

如何确保async main()函数在允许“END”发生之前自然终止,以便输出为:1、2、3、END?

0 投票
1 回答
835 浏览

javascript - NodeJS 虚拟机用例

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

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

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

0 投票
1 回答
247 浏览

javascript - 尝试返回字符串 Nodejs VM 时的引用错误

我正在使用一个名为 safe-eval 的 npm 模块来评估我发送到后端的一些 JavaScript 代码。代码通常是一个函数,将在 safe-eval 内部使用我将提供的参数执行。问题是当返回某个值时,在这种情况下是一个字符串,它没有这样做,而是给我一个引用错误并将字符串值解释为一个变量。

问题发生在 forEach 的一次迭代中。

是的,我知道 forEach 不应该用作循环的控制语句,但在这种情况下,我这样做是为了使用我传递的参数列表来捕获执行期间可能出现的任何错误。

也就是说,当我使用此函数传递参数列表时会出现问题(此函数应该返回字符串 n 次):

这是我得到的回应。

{ "etype": "ReferenceError: codigocodigocodigo 未定义" }

0 投票
2 回答
205 浏览

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

考虑以下代码:

ReferenceError: Buffer is not defined请注意,由于 Buffer 是 Node.js 已添加为Node Specific Global Object的特定于 Node.js 的构造,因此这会产生。 (请注意,其他 JS 全局变量喜欢Math并且Array不共享此问题。) 可以通过将上述代码修改为来解决此特定问题

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

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

0 投票
1 回答
141 浏览

javascript - 如何在 Nodejs VM 中提供源映射

我正在使用以下代码评估javascript捆绑的源代码nodejs

当源代码中有错误时,我会收到这样的错误,因为没有提供源映射

如何为 VM 提供源映射,以便我可以获得正确的文件名而不是evalmachine.<anonymous>

提前致谢

0 投票
0 回答
197 浏览

javascript - VM2 与 Webpack 的使用

我在将 webpack 与使用 vm2 的 typescript 项目一起使用时遇到了问题。webpack --config webpack.config.js给出以下错误:

Terser Invalid function parameter [webpack://./node_modules/source-map-loader/dist/cjs.js!./node_modules/vm2/lib/main.js:1226,1] [index.js] 中的 index.js 错误js:1262,21]

这是我一直在测试的最小复制:

通过使用我的optimization: { minimize: false } }选项,我webpack.config.js能够找到错误的来源。在vm2包源代码中存在此块:

它被 webpacked 为:

这显然失败了。我不确定我还能在这里做什么,是否有可以更改为的配置

我的webpack.config.js