Node.js Mongoose在URI中隐藏密码

Node.js Mongoose在URI中隐藏密码,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,使用mongoose.connect('mongodb://username:password@主机:端口/数据库?选项…),我在脚本中使用,我不认为有任何真正的方法隐藏密码 如果Mongodb只监听127.0.0.1,我应该担心吗?如果我的服务器可以被攻击,那么猫可以只猫脚本获得密码 您可以在启动节点时将密码放入环境变量中,或者从未签入源代码管理的文件中读取密码。如果mongodb仅在本地主机上侦听,则攻击者将无法从远程计算机直接连接到数据库。仍然建议将防火墙配置为阻止远程访问,以防某些配置更

使用
mongoose.connect('mongodb://username:password@主机:端口/数据库?选项…),我在脚本中使用,我不认为有任何真正的方法隐藏密码


如果Mongodb只监听127.0.0.1,我应该担心吗?如果我的服务器可以被攻击,那么猫可以只猫脚本获得密码

您可以在启动节点时将密码放入环境变量中,或者从未签入源代码管理的文件中读取密码。如果mongodb仅在本地主机上侦听,则攻击者将无法从远程计算机直接连接到数据库。仍然建议将防火墙配置为阻止远程访问,以防某些配置更改公开打开mongodb。

这里可能有一个相关主题

解决方案1:

使用环境变量

使用
MONGO\u PASSWORD=yourpasswd节点应用程序运行应用程序

然后,您可以使用
process.env.MONGO\u密码在应用程序中访问它

解决方案2:

制作一个模块(我称之为“机密”),导出所有机密凭证。不要将其签入源代码管理。然后,你的应用程序就可以
要求('secrets')

解决方案3:

是一个加密的密钥值存储,旨在为您的数据提供一个简单、安全和值得信赖的地方


以上所有答案都是很好的建议,但它们仍然让密码在主机上的一个易于识别的位置可见……而不是在shell env变量或文件中


我决定做的是在每次服务器启动时,制作一个作业,为要读取的mongoose脚本创建一个包含密码的文件。然后,有一个cron作业,在启动5分钟后删除该文件。该密码仍然存在于系统中,但要追踪其位置将困难得多

对于解决方案2,它与在
mongoose.connect
中简单地硬编码密码有何不同?@Yerken,给定
secrets.js
中的密码,只需将该
secrets.js
添加到
.gitignore
中,这样您就不会在提交时意外地添加它。因此,源代码中没有密码。您的意思是版本控制中没有密码,它仍然在源代码中:)