【发布时间】:2021-03-22 08:20:48
【问题描述】:
我正在制作一个应用程序,它将使用 Firebase 实时数据库来分发一些数据。我认为我的要求或多或少是普遍的。
- 很少有使用 Java 编写的专用应用程序的客户端具有读/写访问权限。
- 许多移动应用程序用户具有只读权限
- 其他任何人都应该在读取数据时遇到问题(嗯,一些问题)
- 其他人应该无法读取某些部分数据
- 其他人应该不能写数据(这是最重要的)
3 是愿望,4 是强烈的愿望,但 5 是重要的要求。
到目前为止,我看到了完成这项任务的两种方法
- 向授权用户授予读写权限,例如
"rules": {
".read": "auth.uid !== null",
".write": "auth.uid !== null"
}
使用匿名登录自动对移动用户进行身份验证,使用任何其他 (OAuth) 身份验证对作者进行身份验证。
- 向任何人授予读取权限,向经过身份验证的用户授予写入权限
"rules": {
".read": "true",
".write": "auth.uid !== null"
}
并加密数据或其敏感部分。
在任何这些方法中,我都看到了缺点。方法 1 不好,因为任何可以破解 APK 的人都可以写入数据库——这是不可接受的。此外,Google 将为数据库创建数百或数千个匿名帐户 - 每次授权尝试一个。
方法 2 避免了这种情况,但还有另一个问题 - 任何具有良好 Internet 连接的人都可以下载所有数据,这让我不得不向 Google 支付巨额费用。每 TB 的恶意下载将花费我 1000 美元。执行此操作所需的唯一知识是数据库的 URL。在这种情况下,我将无法做任何事情,因为所有客户端都已配置为不受限制的读取访问。
我的预期是否正确,正确的解决方案是什么?
【问题讨论】:
标签: firebase-realtime-database firebase-authentication firebase-security