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

问题描述 投票:0回答:1

我已经使用Firestore Rules实现了数据访问控制,只要我从数据库中获取数据,它就可以正常工作。

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

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

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

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

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

android ios google-cloud-firestore firebase-security-rules
1个回答
0
投票

仅在服务器上实施安全规则。它们没有在客户端上强制执行。

即使在客户端上实施了安全规则,也无法保证新登录的用户看不到其他用户的数据,因为该数据存储在(相对易于查找和访问的)数据库中设备。

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

© www.soinside.com 2019 - 2024. All rights reserved.