android - 移动设备上的 Firestore : rules are not enforced on cached data

标签 android ios google-cloud-firestore firebase-security

我已经使用 Firestore 规则 实现了数据访问控制,每当我从数据库中获取数据时,它都能正常工作。

但是,对之前已获取的任何数据的访问不受设备上的规则控制。

想象一下应用切换 Firebase 用户(退出然后使用不同的 Firebase 用户重新登录)或更改访问控制所依赖的任何其他属性的情况。即使当我尝试从远程数据库刷新数据时,我得到了正确的拒绝,但由于缺乏在本地强制执行规则,设备上缓存的内容仍然可以访问。

这会导致潜在的隐私问题(以前用户的数据可能会泄露给新用户)。当应用程序设计正确时,在设备上进行过滤可能会最大程度地降低风险,但每个人都会犯错误。 例如,您根据 Firestore 规则获取用户可用的所有交易,该规则根据用户 ID 检查每个交易中的字段。当用户更改并且数据被缓存时,新用户将有权访问缓存中的所有事务,无论是否属于他/她。 您可能会说这个设计有缺陷,也许您是对的,但犯这样的错误太容易了。

当情况发生根本变化时(例如注销时),最好简单地删除所有缓存的数据。 这可以通过调用 Firestore.clearPersistence() 来实现。方法,但有一个很大的问题:您必须重新启动(冷启动)应用程序,因为如果您对数据库进行了任何访问,那么这将会失败。 从头开始重新启动应用程序有很多缺点,甚至可能在所有情况下都不可行。

请告知是否有更好的方法来处理此问题。

最佳答案

安全规则只在服务器上执行。它们不会在客户端强制执行。

即使在客户端强制执行安全规则,也不能保证新登录的用户看不到其他用户的数据,因为该数据存储在(相对容易查找和访问的)数据库中在设备上。

如果您想要确保新用户看不到之前用户的数据,请考虑让他们使用不同的 Android/iOS 配置文件登录,这为他们提供了一个完全独立的工作区。除了以编程方式或手动方式清除持久性数据库之外,确实是唯一的其他选择。

关于android - 移动设备上的 Firestore : rules are not enforced on cached data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58293820/

相关文章:

android - Strings.xml 不识别汉字

firebase - 将互斥体与 Firebase 结合使用来锁定文档,同时避免扩展时的多次重试尝试

firebase - Firestore可以使用一个查询更新多个符合条件的文档吗?

ios - 取消按钮在 MFMailComposeViewController 中不执行任何操作 - iOS 8

ios - Swift 数组与另一个数组引用获取值

java - 无法将 java.lang.String 类型的值转换为 Date(在字段 'time_stamp' 中找到)

java - ClassCastException TextSwitcher 到 Adview

android - 如何刷新来自android中服务器的listview的内容?

android - 无法在 Windows 8 上将 Android 设备连接到 PC

ios - UISplitViewController shouldAutorotateToInterfaceOrientation