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