如何限制NodeJS中模块的访问

时间:2018-01-05 17:57:53

标签: javascript node.js

Node中是否存在限制访问权限或仅允许从特定模块访问某些其他模块的方法? 我应该替换全局范围内的require函数和require对象吗? 我基本上不相信特定的模块。它可能有恶意代码,我想保护我的服务器。这个想法类似于Java策略,您可以根据命名空间限制访问。

编辑:我找到了一种方法,并在npmjs.org上将解决方案发布为require-shield。 https://www.npmjs.com/package/require-shield

2 个答案:

答案 0 :(得分:1)

  

Node中是否存在限制访问权限或仅允许从特定模块访问某些其他模块的方法?

没有。没有。

  

我应该在全局范围内替换require函数和require对象吗?

这不会阻止访问。任何恶意代码仍然可以使用fs.readFile()eval()来运行他们想要的任何外部代码。

  

我基本上不信任特定的模块。它可能有恶意代码,我想保护我的服务器。

开始保护您的服务器免受恶意代码攻击的唯一方法是在外部进程中运行它,并非常小心地控制外部进程有权执行的操作(例如,将其放在自己的只具有基本权限的用户帐户中) 。最安全的方法是在虚拟机中运行不受信任的代码,该虚拟机与服务器的其余部分完全沙箱化。

还有node.js VM在不同的Javascript实例中运行代码,因此外部代码无法与服务器的Javascript环境混淆。虽然这确实保护您的Javascript代码免受其他Javascript代码的影响,但它不提供完整的系统保护,即在实际VM中运行外部代码会提供(例如,不受信任的代码仍然可以访问您的文件系统和其他系统资源)。

答案 1 :(得分:0)

“离线”系统上的Believer也更安全,因此将容器/虚拟化与Javascript进程隔离将是您接下来想要做的事情。

如果您真的想探究Javascript的可能性,那么还有node vm2,声称它可以比官方的Node.js VM运行不受信任的代码。