我希望能够让用户提交任意 JavaScript 代码,然后将其发送到 Node.JS 服务器并在输出发送回多个客户端(作为 JSON)之前安全地执行。eval
想到了这个函数,但我知道这有多个安全问题(用户提交的代码将能够访问 Node 的文件 API 等)。我见过一些项目,如 Microsoft Web Sandbox 和 Google Caja,它们允许执行经过清理的标记和脚本(用于在网站上嵌入第三方广告),但似乎这些是客户端工具,我不确定它们是否可以在 Node.js 中安全使用。
是否有一种标准方法可以在 Node 中沙箱并执行不受信任的 JavaScript 以获取输出。尝试在服务器端执行此操作是错误的吗?
编辑:用户能够利用 JavaScript 的全部功能并不重要,事实上,最好能够选择哪些 API 将提供给用户代码。
编辑:我将继续更新我发现的内容。这个 Sandcastle 模块 ( bcoe/sandcastle
) 似乎旨在完成我的想法。不知道它有多安全,但因为我这不是什么太重要的事情,我想我会尝试一下。如果我能够成功地做到这一点,我会添加我自己的答案。