我有一个客户端反应应用程序,我需要从另一个人直接填充到源的MongoDB Atlas集合中获取信息。当我去检查连接字符串时,我注意到代码中需要提供用于数据库访问的用户密码:
(代表人数不足,无法发布图片) https://i.imgur.com/5Vs23WJ.png
现在很明显,如果我在前端代码中包含此权限,那么任何人都可以看到我的密码,这不好。但是我需要这个应用程序是自包含的,并且我不想只托管服务器来重新路由加载网站时调用的单个Get请求。
如果我创建一个具有只读特权的新用户,是否可以安全地将该用户的密码(显然是超级通用)保留在用于访问数据库的前端代码中?这有什么害处吗?我是否可以假设未列入白名单的IP地址无法向Atlas数据库发出请求?将被列入白名单的唯一地址是将托管Web应用程序的IP,因此我想我不必担心有人发送垃圾邮件请求增加我的Atlas帐户费用或进行其他恶意操作?
我是应届毕业生,所以我在安全部署方面没有太多经验,但我希望今年夏天能有所改变。
谢谢:)
答案 0 :(得分:1)
我不确定“最佳”做法,但是我将尝试根据自己的回答:
将用户的密码(显然是超级通用)保留在用于访问数据库的前端代码中是否安全?
是的,您可以创建一个只读用户。使用超级用户进行读取通常不是一个好主意。我只会提供工作所需的权限。
我是否可以假设未列入白名单的IP地址无法向Atlas数据库发出请求?
正确。只有列入白名单的IP才能连接到Atlas实例。
回答后,我个人会:
此主意是通过限制外界对数据库的访问来提供安全性。使用白名单是安全的一层。使用REST API是进一步的安全层,从本质上讲,这将迫使需要数据库访问的所有内容都经过您控制下的安全门。
REST API网关的其他一些优点:
请注意,无论如何我都不认为上述是“最佳”实践。这就是我要做的。