首页 > 解决方案 > 使用具有离线持久性的 Firestore - 桌面(网络)

问题描述

Firestore 中的离线持久性使浏览器能够存储未上传到服务器的记录(离线),即使在会话关闭(浏览器退出)之后也是如此

请参阅:https ://firebase.google.com/docs/firestore/manage-data/enable-offline

但是,当用户从会话中注销时,firestore 不提供任何官方支持的方式来清除 Chace。请参考:https ://youtu.be/qGAIimfrBB4?t=257

最近他们发布了clearPersistence功能,但他们明确指出这不是出于安全原因,如果安全性对您来说很重要,建议禁用 Persistence。请参阅:https://firebase.google.com/docs/reference/android/com/google/firebase/firestore/FirebaseFirestore#clearPersistence()

注意:clearPersistence() 主要用于帮助编写使用 Cloud Firestore 的可靠测试。它使用一种有效的机制来删除现有数据,但不会尝试安全地覆盖或以其他方式使缓存数据不可恢复。对于对用户会话之间的缓存数据泄露敏感的应用程序,我们强烈建议根本不启用持久性。

我想更好地了解在用户注销时使用“ClearPersistence”的安全漏洞是什么。

有没有人有这方面的经验?任何其他可行的解决方案可以让您在注销后删除所有 Firestore 缓存?

标签: javascriptfirebasegoogle-cloud-firestore

解决方案


无法保证您的代码将在浏览器(或任何其他客户端)中运行。例如:恶意用户可以从您的应用程序中获取配置数据,并调用 API 以访问您项目中的相同数据,然后将其存储在他们想要的任何地方。

另一个恶意用户可能会阻止应用程序清除本地缓存,或者快速将本地缓存文件复制到另一个位置以在清除之前进行复制。

这些只是最简单的两个例子。一个简单的事实是,您应该假设任何有权访问该客户端的用户都可以看到客户端上存在/保留的任何数据。


推荐阅读