Android版Firebase实时(在线)数据库的安全性如何?
我刚刚开始使用Google的firebase作为Android应用数据的在线集中式数据库(从使用本地sqlite迁移)。
作为firebase的新手,我想问一下android的firebase在线数据库有多安全?
从以下主题中读取,看起来任何可以访问google-services.json的人都可以插入和修改我的firebase数据库中的在线数据吗?
- 我应该将google-services.json(从Firebase)添加到我的存储库吗?
- google-services.json可以免受黑客攻击吗?
我担心任何能够访问反编译的apk配置文件(google-services.json)的人都可以在他们的android项目中使用它,比如说,创建一个类似包名的Android应用程序并推送恶意数据或从我的删除 firebase数据库。
如果有新的和聪明的解决办法使在线数据库更安全,你能提供建议吗?
到目前为止为了增加安全性,我试图:
- 将firebase的数据库规则编辑为:
{ "rules": { ".read": "auth != null", ".write": "auth != null" } }
-
将firebase电子邮件/密码validation添加到我的应用程序以控制登录。
但是,我发现即使没有身份validationfunction,新创建的应用程序仍然可以通过使用“hacked”google-services.json将数据推送和修改到在线firebase数据库中。
感谢您的意见和建议!
欢迎来到有效的双层系统的乐趣。 您可以做几件事来保护您的数据 – 但不是免费的。
首先是一些事实:
- 拥有数据库凭据的人可以访问它
- 如果应用程序可以访问数据,那么任何可以从您的应用程序中提取数据库的人都可以有效地使用您的数据库凭据
有一些对策可以提高攻击者的标准,但是一个坚定的(或幸运的)攻击者可以获得访问权限。 如果他有访问权限,则很难阻止他造成损害,因为例如更改数据库凭据也会强制所有用户更新。
你能做的是
-
决定保护数据是不值得的,并且你/你的管理层可以承担风险(但是你会有一个决定并完成)
-
像您一样使用firebase ACL 。 要创建用户特定的“depots”,请使用每个用户节点(参见下文,此处不会呈现代码)。 配置发生在控制台中 。
-
在服务器上构建业务逻辑并将所有凭据放在那里。 这将确保您完全控制
-
阻止应用程序以纯文本格式读取数据。 使用公钥算法加密数据。 将私钥保留在必须读取数据的系统上。 然后应用程序无法以普通方式读取数据(但仍然可以查看您拥有多少以及更改率是多少)。 这也不会阻止操纵或删除数据。
示例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凭据和数据更加私密和安全。