Android 移动设备上的Firestore:未对缓存数据强制执行规则

Android 移动设备上的Firestore:未对缓存数据强制执行规则,android,ios,google-cloud-firestore,firebase-security,Android,Ios,Google Cloud Firestore,Firebase Security,我使用Firestore规则实现了数据访问控制,每当我从数据库中获取数据时,这些规则都可以正常工作 但是,对以前获取的任何数据的访问不受设备上的规则控制 想象一下,当应用程序切换Firebase用户(注销,然后与其他Firebase用户重新登录)或更改访问控制所依赖的任何其他属性时的情况。尽管我在尝试刷新远程数据库中的数据时遭到了适当的拒绝,但由于缺乏在本地强制执行规则,设备上缓存的内容仍然可以访问 这会导致潜在的隐私问题(以前用户的数据可能泄漏给新用户)。如果应用程序设计得当,那么在设备上进行

我使用Firestore规则实现了数据访问控制,每当我从数据库中获取数据时,这些规则都可以正常工作

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

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

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

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


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

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

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


如果你想确保新用户看不到前一个用户的数据,考虑让他们使用不同的Android /iOS配置文件登录,这就给了他们一个完全独立的工作空间。除此之外,通过编程或手动清除持久性数据库确实是唯一的其他选择。

谢谢您的回答。你能解释一下你在不同的个人资料上的意思吗?在操作系统级别上,同一设备上有多个用户?是的,差不多就是这样。事实上,我不确定哪些设备和操作系统支持它,但这将是防止数据泄漏的方法。很公平,尽管通常问题是一台设备由多个用户(如平板电脑)共享,而无需设置单独的配置文件。我们不能假设不会有任何数据泄漏,因为用户应该正确使用应用程序。无论如何,清除缓存是最好的解决方案,但如果不从头开始重新启动应用程序就可以完成,那就太好了。我同意这样的体验会更好,所以我绝对建议改进它。