【问题标题】:How do I run code in a VM while restricting access to all globals except the ones specified如何在 VM 中运行代码,同时限制对除指定全局变量之外的所有全局变量的访问
【发布时间】:2019-05-27 15:11:55
【问题描述】:

如果我在字符串中有一些代码,如何在不暴露任何全局变量的情况下运行它。

vm 模块似乎暴露了内置函数:

const vm = require("vm");

vm.runInNewContext("console", {}); // No error, outputs an object
                                   // Expected it to error, since we are passing an empty context

不是 this question 的副本,其解决方案对我不起作用(在 Node v10.5.0 中)。

【问题讨论】:

  • @blex 我没有使用script.runInNewContext ,我使用的是vm.runInNewContext nodejs.org/api/…
  • 糟糕,我的错!我看到相同的方法名称并将它们混合在一起。 This discussion 让我认为这不是错误“如果您连接了开发工具调试器,控制台上的方法将传递给调试器。否则它们是无操作的。”跨度>

标签: javascript node.js scope global


【解决方案1】:

看起来像consolehappens to be an exception

如果你尝试其他全局变量,例如requireprocess__dirname__filename 等,它们都会引发错误。

【讨论】:

  • 嗯,但我没有收到错误,例如 SymbolStringObject
  • 这些是语言的一部分。
  • 那么无论如何这些总是可以访问的?
  • 看起来你可以在你传递的上下文中覆盖它们:vm.runInNewContext(..., { Symbol : undefined, console : undefined })
  • @FireCubez 如果它是一个合适的虚拟机,内置是该领域本地的新实例。无需使不可访问。
猜你喜欢
  • 1970-01-01
  • 2021-01-19
  • 2016-05-04
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多