我希望能够让用户提交任意JavaScript代码,然后将其发送到Node.JS服务器并安全地执行,然后再将输出发送回多个客户端(如JSON)。该eval功能浮现在脑海,但是我知道这涉及多个安全问题(用户提交的代码将能够访问Node的File API等)。我已经看到了一些项目,例如Microsoft Web Sandbox和Google Caja,它们允许执行经过清理的标记和脚本(用于在网站上嵌入第三方广告),但是似乎这些是客户端工具,我不确定它们是否可以在Node中安全使用。
eval
有没有一种标准的方法来沙盒化并在Node中执行不受信任的JavaScript,以获取输出。尝试在服务器端进行操作是错误的吗?
编辑: 用户能否利用JavaScript的全部功能并不重要,实际上最好能够选择要提供给用户代码的API。
编辑: 我将继续并用我发现的内容进行更新。这个Sandcastle模块( bcoe/sandcastle )似乎旨在实现我的想法。不知道它的安全性如何,但是由于我并没有那么重要,我想我会尝试的。如果能够成功完成,我将添加自己的答案。
bcoe/sandcastle
由于gf3无法提供防止沙箱损坏的保护,因此此答案已过时
http://gf3.github.io/sandbox/-它require('child_process')代替require('vm')。
require('child_process')
require('vm')