【发布时间】:2017-08-19 03:28:38
【问题描述】:
我似乎不知道如何设置节点沙箱,它可以安全地运行不受信任的代码,并允许用户通过 api 调用与程序交互(系统进出)。我正在尝试在浏览器中设置一个控制台,供用户从服务器运行他们自己的代码。
是否有任何节点包支持这一点,还是我需要编写自己的节点 VM?谢谢。
编辑:我希望用户能够编写readline() 并让程序在断点处等待数据传入。同样console.log() 的输出应该重定向到输入 api 调用的响应。
【问题讨论】:
-
也许是:Nodejs VM module?虽然如果您想要完全安全的沙箱,那么您可能需要在实际隔离的 VM 中运行一个新的 nodejs 进程。还有How to run user-submitted scripts securely in a node.js sandbox?
-
我看过这些,但如果用户写
readline(),它们似乎无法接受输入。 @jfriend00 检查编辑 -
我不明白你在做什么。你期望标准输入来自哪里?您期待本地控制台吗?你期望标准输出去哪里?您的问题提到“通过 API 调用与程序交互”,我认为这意味着您正在启动服务器,并且其他地方的其他一些进程将与该服务器进行通信。
-
是的,我有一个服务器正在运行,上面有用户的代码。当用户在客户端发出 api 请求来运行程序时,我想要一个 vm 来运行它。如果有 readline,程序应该暂停并等待,对客户端的响应将在断点之前产生任何 sys out 数据,并且应该告诉客户端输入是预期的。当用户输入输入时,程序继续进行,直到下一次输入或程序结束。在任何一种情况下,api 响应都会使 sys 退出。
-
这能回答你的问题吗? How to run untrusted code serverside?
标签: javascript node.js express virtual-machine