从文档中,基本的猫鼬连接字符串是mongoose.connect('mongodb://username:password@host:port/database?options...');
。
问题是用户名:密码以纯文本形式存储在源代码中。我们担心的攻击媒介是,如果有人要访问我们的源代码,他们也可以访问数据库。
有哪些策略可以避免此漏洞?
如果有人要获得对服务器的root权限,我相信无论如何我们都会成为一条小溪,但有没有办法让人们无法访问我们的源代码然后妥协我们的DB?
答案 0 :(得分:3)
你是认为如果有人能够访问服务器本身并不重要,那么数据可以在服务器上以纯文本形式公开,但加密它不会受到伤害(例如如果您正在查看包含它的文件。)
有两种策略可以解决这个问题:
例如,如果您在Heroku上托管,您的配置可能如下所示:
{
"development": {
"db": "mongodb://localhost/app_devel"
},
"production": {
"db": process.env.MONGOLAB_URI
}
}
答案 1 :(得分:1)
我们最终解决的最终解决方案是将加密的密码存储在提交给我们VCS的配置文件中。
为了解密密码,我们创建了一个简单的小二进制文件golang
(< 100 LoC),它验证了机器的某些物理属性(mac地址+其他)并运行解密。这是通过child_process.exec
执行的。加密/解密二进制文件的源代码存储在我们系统的特权部分,只有少数员工可以访问。
这样做的最终结果是,如果有人要获取我们的应用程序源代码,包括已编译的加密/解密二进制文件,那么它们就不会有好处,因为密码是加密的并且二进制文件不会工作,除非它和& #39;在我们已经过身份验证的计算机上运行。
系统中的缺陷是,如果有人获得经过身份验证的计算机的root访问权限,他们就可以升级到数据库。此外,如果有人获得加密二进制文件的源代码,他们可以学习解密方案。出于我们的目的,我们认为这些可能的入境点是可以接受的。