embedded式节点/ JavaScript的沙箱?

我正在编写一个Node应用程序,允许用户执行任意的JavaScript代码 – 一种超越常规用户界面的“内部API”/业务stream程。

我正在寻找一个沙箱环​​境,提供以下内容:

  • 单独执行而不产生一个全新的线程 – 这将由成千上万的用户运行,我宁愿坚持匿名函数,无法访问父调用堆栈…或…在线程的事件.. 。跨多个服务器产卵的能力。

  • 语法检查抛出parsing/执行错误exception与崩溃整个应用程序。

  • 禁用函数/ var访问的function。 我试图阻止访问节点的I / O …所以用户不能把它变成一个DoS脚本或读取/ etc / passwd,但可以运行任何本地语法和预先批准的function列表。

  • 超时控制…所以执行上限可以适用于while(true) do_intensive_stuff(); 等等

任何明显的select都在想

谷歌的“节点js沙箱”,你会得到几个不同年龄和成熟度的项目点击。

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

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

解决scheme2:具有沙盒工作者node.js进程池(每个进程在它自己的chroot或单独的vm环境中),通过tcp socket / dnode /自己的rpc进行通信。 input任务在队列中等待,如果执行限制被击中,则整个进程被终止并重新生成,如果没有,则重新用于下一个任务。 这样你就不会受到单机的限制,而且可以轻松地进行横向扩展。

也试着检查工作人员如何在Travis-ci中实施

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

Interesting Posts