嵌入式节点/javascript沙盒?

嵌入式节点/javascript沙盒?,javascript,node.js,sandbox,v8,Javascript,Node.js,Sandbox,V8,我正在编写一个节点应用程序,它允许用户执行任意javascript代码——有点像“内部API”/业务流,扩展到常规UI之外 我正在寻找提供以下功能的沙箱环境: 单独执行而不产生一个全新的线程-这将由数千名用户运行,我更喜欢使用无法访问父调用堆栈的匿名函数。。。或在线程的情况下。。。跨多个服务器生成的能力 语法检查,在解析/执行错误时引发异常,而不是使整个应用程序崩溃 禁用函数/var访问的能力。我正在尝试阻止访问节点的I/O。。。因此,用户不能将其转换为DoS脚本或读取/etc/passwd,

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

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

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

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

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

  • 超时控制。。。因此,执行上限可以应用于
    (true)do_-intensive_-stuff(),等等

有什么明显的选择吗?

解决方案1:使用解释器。解决沙箱,但nod解决超时控制

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


此外,还可以尝试查看Google for‘node js sandbox’中workers是如何实现的,您将获得一些不同年龄和成熟度的项目


似乎很受欢迎。

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

内置方法对此不起作用吗?我没有亲自测试过,但它们似乎是你的一个好选择,至少在开始时是这样。你可以很容易地将你的额外功能包装起来。这是一个很好的建议,但现在看起来还不够成熟。。。根据文档:“稳定性:2-不稳定”稳定性指标指的是API。换言之,API可能会在稍后更改为较新版本的Node。它并不表示节点的特定部分不应在生产中使用。为此,我建议查看他们的bug追踪器。感谢您的澄清,这很有意义。感谢您的建议。js似乎是一个全面的解释器——如果可能的话,为了提高速度,我更喜欢使用原生V8。沙盒工作节点的集合是安全的,并且看起来具有良好的可伸缩性,但它仍然会公开节点函数吗?我试图限制对全局对象的所有访问,但通过API对象公开的只读函数除外,因此代码需要在我定义的API范围内编写。这似乎是迄今为止最接近的!注:gf3沙盒可以被打破。