我最近刚刚开始使用谷歌的firebase作为安卓应用程序数据的在线集中式数据库(从使用本地sqlite迁移而来)。
作为firebase的新手,我想问一下安卓的firebase在线数据库有多安全?
从以下线程中可以看出,任何能够访问google-services.json的人都可以插入和修改我的firebase数据库中的在线数据吗?
- 我应该将google-services.json(来自Firebase)添加到我的存储库中吗
- 谷歌services.json不受黑客攻击吗
我担心任何能够访问反编译的apk配置文件(googleservices.json)的人如何在他们的android项目中使用它,比如说,创建一个具有类似包名的android应用程序,并推送恶意数据,或从我的firebase数据库中删除。
如果有新的、聪明的解决方案可以让在线数据库更安全,你能给出建议吗?
到目前为止,为了增加安全性,我尝试过:
- 编辑firebase的数据库规则以:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
-
将firebase电子邮件/密码身份验证添加到我的应用程序以控制登录。
然而,我发现,即使没有身份验证功能,新创建的应用程序仍然可以将数据推送和修改到在线firebase数据库中,只需使用"被黑的";谷歌服务.json.
感谢您的评论和建议!
欢迎来到两层系统的乐趣。你可以做一些事情来保护你的数据,但不是免费的。
首先是一些事实:
- 拥有数据库凭据的人可以访问该数据库
- 如果应用程序可以访问数据,那么任何可以从应用程序中提取数据的人都可以有效地使用您的数据库凭据
有一些对策可以提高攻击者的门槛,但坚定的(或幸运的)攻击者可以获得访问权限。如果他有访问权限,很难防止他造成损害,因为例如,更改数据库凭据也会迫使所有用户更新。
你能做的就是
-
决定保护数据不值得付出努力,您/您的管理层可以承受风险(但随后您会做出决定并完成)
-
像你已经做过的那样使用firebase ACL。要创建用户特定的"仓库",请使用每个用户节点(见下文,此处不会呈现代码)。配置发生在控制台中。
-
在服务器上构建业务逻辑,并将所有凭据放置在那里。这将确保您完全控制
-
阻止应用程序以明文读取数据。使用公钥算法对数据进行加密。在必须读取数据的系统上保留私钥。然后应用程序无法直接读取数据(但仍然可以例如了解你有多少数据以及变化率是多少)。这也不会阻止对数据的操作或删除。
示例ACL:
// These rules grant access to a node matching the authenticated
// user's ID from the Firebase auth token
{
"rules": {
"users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
一些Firebase项目方法,如常规的Android和Web(JS)快速启动项目,暴露了将Firebase项目的访问权限和凭据共享给用户的风险。确保firebase数据安全的唯一方法(如果firebase凭据不能选择对正面客户端隐藏)确实是@Jens提出的,通过正确定义和构建安全规则。恶意黑客将很难处理你的数据,即使他们可以访问你的项目凭据。更多信息说明可以在这里找到:
- 保护您的数据
- Firebase数据库安全规则API
作为firebase项目凭据公开的快速更新,我发现使用后端脚本与firebase通信将消除这种问题,因为脚本和代码实现对用户是隐藏的。Firebase在各种帮助程序库(如NodeJS、PHP、Python等)上为REST API提供了出色的支持。使用REST API加上安全规则将使我们的firebase凭据和数据更加私有和安全。