android - 移动设备上的 Firestore:不对缓存数据强制执行规则
问题描述
我已经使用Firestore 规则实现了数据访问控制,只要我从数据库中获取数据,它就可以正常工作。
但是,对先前已获取的任何数据的访问不受设备上的规则控制。
想象一下,当应用切换 Firebase 用户(退出然后使用不同的 Firebase 用户重新登录)或更改访问控制所依赖的任何其他属性时的情况。即使我在尝试从远程数据库刷新数据时得到适当的拒绝,但由于缺乏在本地执行规则,仍然可以访问设备上缓存的内容。
这会导致潜在的隐私问题(以前用户的数据可能会泄露给新用户)。如果应用程序设计得当,那么在设备上进行过滤可能会将风险降到最低,但每个人都会犯错。例如,您根据 Firestore 规则获取用户可用的所有交易,该规则根据用户 ID 检查每个交易中的字段。当用户更改并且数据被缓存时,新用户将可以访问缓存中的所有事务,无论它是否属于他/她。你可能会争辩说这个设计是有缺陷的,也许你是对的,但是犯这样的错误太容易了。
当情况发生根本变化时(例如在退出时),最好简单地删除所有缓存的数据。这可以通过调用Firestore.clearPersistence()方法来实现,但有一个很大的问题:您必须重新启动(冷启动)应用程序,因为如果您对数据库进行了任何访问,那么这将失败。从头开始重新启动应用程序有很多缺点,甚至可能在所有情况下都不可行。
请告知是否有更好的方法来处理这个问题。
解决方案
安全规则仅在服务器上强制执行。它们不会在客户端上强制执行。
即使在客户端上强制执行安全规则,也不能保证新登录的用户看不到其他用户的数据,因为该数据存储在设备上(相对容易查找和访问)的数据库中.
如果您想确保新用户看不到之前用户的数据,请考虑让他们使用不同的 Android/iOS 配置文件登录,这为他们提供了一个完全独立的工作区。除了以编程方式或手动清除持久性数据库之外,确实是唯一的其他选择。
推荐阅读
- python - 想出一个python代码来解决下面的问题
- javascript - 反应处理状态
- dask - 什么时候使用 Dask 集合的酸洗方法
- google-app-engine - 使用 ffmpeg 转码 GCS 文件
- python - 使用漂亮的汤和使用 python 的硒进行刮擦的问题
- flutter - 如何在 Flutter 中使用圆形项目制作 ListView 或 Catgories
- php - 异常无法解析时间字符串
- ios - Dispatch Semaphore 会无意中死锁吗?
- shadow-dom - shadowRoot.getSelection()?
- python - 我无法显示评论数