嵌入式节点/javascript沙箱

Embedded node/javascript sandbox?

本文关键字:沙箱 javascript 节点 嵌入式      更新时间:2024-03-04

我正在编写一个Node应用程序,该应用程序允许用户执行任意javascript代码——有点像"内部API"/业务流,扩展到常规UI之外。

我正在寻找一个提供以下功能的沙箱环境:

  • 在不生成全新线程的情况下单独执行-这将由数千名用户运行,我更喜欢使用无法访问父调用堆栈的匿名函数。。。或者。。。在线程的情况下。。。跨多个服务器生成的能力。

  • 语法检查在解析/执行错误时引发异常,而不是崩溃整个应用程序。

  • 禁用函数/var访问的功能。我正试图阻止访问节点的I/O。。。因此,用户不能将其转换为DoS脚本或读取/etc/passwd,但可以运行任何本地语法和预先批准的函数列表。

  • 超时控制。。。因此执行上限可以应用于while(true) do_intensive_stuff();

脑海中浮现出明显的选择吗?

谷歌搜索"node-js-sandbox",您将获得一些不同年龄和成熟度的项目。

http://gf3.github.com/sandbox/似乎很受欢迎。

解决方案1:使用js.js解释器。解决沙盒,但点头解决超时控制。

解决方案2:拥有沙盒worker node.js进程池(每个进程都在自己的chroot或单独的vm环境中),通过tcpsocket/dnode/自己的rpc进行通信。输入任务在队列中等待,如果达到执行限制,则整个过程将被终止并重新生成,否则将被重用到下一个任务。这样你就不受单机的限制,可以很容易地水平缩放。

还试着检查工人是如何在travis ci 中实现的

还有另一个模块可以完成这项工作-vm2。与sandbox不同,它允许您使用白名单内置节点对象安全地运行不受信任的代码。