我刚刚开始使用Google的firebase作为Android应用数据的在线集中式数据库(从使用本地sqlite迁移)。
作为firebase的新手,我想问一下android的firebase在线数据库有多安全?
从以下主题中读取,看起来任何可以访问google-services.json的人都可以插入和修改我的firebase数据库中的在线数据吗?
我担心任何能够访问反编译的apk配置文件(google-services.json)的人都可以在他们的Android项目中使用它,比如说,创建一个类似包名称和推送的Android应用程序来自我的firebase数据库的恶意数据或删除。
如果有新的和聪明的解决方法可以使在线数据库更安全,您能提供建议吗?
到目前为止,为了增加安全性,我试图:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
将firebase电子邮件/密码身份验证添加到我的应用中以控制登录。
但是,我发现即使没有身份验证功能,新创建的应用仍然可以将数据推送和修改到在线firebase数据库中,只需使用“hacked”google-services.json。
感谢您的意见和建议!
答案 0 :(得分:3)
欢迎来到有效的双层系统的乐趣。您可以做几件事来保护您的数据 - 但不是免费的。
首先是一些事实:
有一些对策可以提高攻击者的标准,但是一个坚定的(或幸运的)攻击者可以获得访问权限。如果他有权进入,很难阻止他造成伤害,例如更改数据库凭据也会强制所有用户更新。
你能做的是
决定保护数据不值得付出努力,并且您/您的管理层可以承担风险(但之后您已经 decission 已完成)
正如您所做的那样使用the firebase ACL。要为每个用户节点创建用户特定的“depots”(请参见下文,此处不会呈现代码)。配置发生在console。
在服务器上构建业务逻辑并将所有凭据放在那里。这将确保您拥有完全控制权
阻止应用以纯文本格式读取数据。使用公钥算法加密数据。将私钥保留在必须读取数据的系统上。然后,应用程序无法以简单的方式读取数据(但仍然可以查看您拥有多少以及更改率是多少)。这也不会阻止操纵或删除数据。
示例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"
}
}
}
答案 1 :(得分:0)
一些Firebase项目方法(如常规Android和Web(JS)快速入门项目)暴露了向用户共享firebase项目访问权限和凭据的风险。保护firebase数据的唯一方法(如果firebase凭证无法选择从前置客户端隐藏),确实正如@Jens所建议的那样,通过正确定义和构建安全规则。即使可以访问您的项目凭据,恶意黑客也会很难使用您的数据。更多信息说明可在此处找到:
作为对firebase项目凭据的快速更新,我发现使用后端脚本与Firebase进行通信将消除这种担忧,因为脚本和代码实现对用户是隐藏的。 Firebase为各种辅助库提供了对REST API's的出色支持,例如NodeJS,PHP,Python等。使用REST API以及安全规则将使我们的firebase凭据和数据更加私密和安全。