javascript - 使用具有离线持久性的 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 缓存?
解决方案
无法保证您的代码将在浏览器(或任何其他客户端)中运行。例如:恶意用户可以从您的应用程序中获取配置数据,并调用 API 以访问您项目中的相同数据,然后将其存储在他们想要的任何地方。
另一个恶意用户可能会阻止应用程序清除本地缓存,或者快速将本地缓存文件复制到另一个位置以在清除之前进行复制。
这些只是最简单的两个例子。一个简单的事实是,您应该假设任何有权访问该客户端的用户都可以看到客户端上存在/保留的任何数据。
推荐阅读
- perl - 如何使用perl读取excel文件?
- spring - spring如何实现受用户名保护的访问
- .net - 在 .Net CLR 中,如何使用 Sync 块实现线程安全?
- spring - Spring 安全上下文手动身份验证给出奇怪的结果
- r - 如何将一个实验单元在不同日期的 2 个观察结果合并为一行
- css - 我需要一个元素成为其他元素的子元素而不继承某些属性
- ssrs-2012 - SSRS 报表参数交互
- angular - 是否可以将 postgraphile 与 .net 核心一起使用?
- python - 如何使用 youtube data api 检查 creativecommons 视频?我有以下代码,如果视频是知识共享,如何打印 true?
- asp.net-mvc - 错误:无法将 lambda 表达式转换为类型“ServiceLifetime”,因为它不是委托类型