5

我正在编写一个 Node 应用程序,它允许用户执行任意 javascript 代码——一种“内部 API”/业务流程,超出了常规 UI。

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

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

  • 语法检查在解析/执行错误时抛出异常与使整个应用程序崩溃。

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

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

有什么明显的选择浮现在脑海中?

4

3 回答 3

3

谷歌搜索“node js 沙箱”,你会得到一些不同年龄和成熟度的项目。

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

于 2012-07-31T05:08:06.113 回答
0

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

解决方案 2:拥有沙盒工作 node.js 进程池(每个都在自己的 chroot 或单独的 vm 环境中),通过 tcp socket/dnode/您自己的 rpc 进行通信。输入任务在队列中等待,如果达到执行限制,则整个进程被杀死并重新生成,否则将被重用于下一个任务。这样你就不受单机限制,可以轻松横向扩展。

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

于 2012-07-25T13:00:07.473 回答
0

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

于 2015-02-14T22:00:41.330 回答