Mat*_*ore 2 javascript module global-variables node.js node-modules
关于如何从 nodejs 模块中删除全局上下文的任何想法?
我不是在寻找以下问题的解决方案,但如果您需要更多上下文,请继续。
我正在开发一个项目,我的用户可以上传他们自己的 nodejs 模块,如果它适合预定义的框架,它将在我们的一天中定期运行。显然,这是一个主要的安全问题。一个好的 90% 解决方案只是删除全局上下文。
正如评论中所述,您确实需要在单独的进程中运行用户提供的模块,因为无限循环会冻结任何节点进程。
您应该从VM模块开始:
require)。下面是一个例子:
var fs = require('fs'),
vm = require('vm');
函数运行代码(文件名){
var code = fs.readFileSync(fileName),
沙盒 = {
控制台:控制台,
设置超时:设置超时,
清除超时:清除超时,
需要:需要,
模块:模块,
出口:出口,
过程:过程,
缓冲区:缓冲区
};
vm.runInNewContext(code, sandbox, fileName);
}
用户提供的代码将能够访问我在沙箱中传递的所有内容,就好像它在全局范围内一样。就我而言,我选择从真正的 node.js 全局范围中公开几乎所有内容。您可以选择不公开的内容。
此外,如果您希望您的解决方案安全,您应该检查child_process.spawn。
| 归档时间: |
|
| 查看次数: |
1629 次 |
| 最近记录: |