如何从nodejs模块中删除全局上下文



从nodejs模块中删除全局上下文的任何想法?

我不是在寻找解决以下问题的解决方案,但是如果您需要更多上下文,则可以。

我正在研究一个项目,我的用户可以上传自己的Nodejs模块,并且,如果它符合预定义的框架,它将在我们的定期时间内在我们的日期中运行。显然,这是一个主要的安全问题。一个好的90%的解决方案将仅消除全球环境。

如注释中所述,您确实需要在单独的过程中运行用户供给模块,因为无限循环会冻结任何节点过程。

您应该从VM模块开始:

  • 读取文件内容(使用fs.ReadFile,而不是require)。
  • 定义一个新的全局对象。您可以选择暴露任何想要的东西(并隐藏其余的)。
  • 运行用户代码。

这是一个示例:

var fs = require('fs'),    vm = require('vm');函数runcode(filename){  var code = fs.ReadFilesync(文件名),      沙盒= {        控制台:控制台,        settimeout:settimeout,        cleartimeout:cleartimeout,        要求:要求,        模块:模块,        出口:出口,        过程:过程,        缓冲区:缓冲区      };  vm.runinnewcontext(代码,沙盒,文件名);}

用户提供的代码将能够访问我在沙箱中传递的所有内容,就好像它在全局范围中一样。就我而言,我选择了几乎揭露来自真实node.js全局范围的所有内容。您可以选择不暴露的东西。

另外,如果要解决方案,则应检查Child_process.spawn。

相关内容

  • 没有找到相关文章

最新更新