Firebase Cloud Firestore公开读仅认证写的安全风险咨询
Cloud Firestore 当前配置的安全风险说明
你当前配置的全局规则等价于全库公开可读、任意认证用户可全库读写,不存在任何数据粒度的权限校验,存在明确的安全隐患:
具体安全隐患
- 全量数据无门槛泄露:所有路径的读权限完全放开,任何人只要拿到你的Firebase项目ID(该参数默认会打包到前端代码中,抓包、查看前端源码即可轻松获取),不需要任何身份验证就能遍历、爬取你Firestore内的全部数据,包括用户隐私信息、业务核心数据等。
- 认证用户可任意篡改全库数据:只要是完成你项目身份认证的用户(不管是普通注册用户、还是恶意注册的虚拟账号),都拥有所有文档的增、删、改权限,没有任何操作限制。
- 完全没有数据隔离能力:没有配置文档级的权限校验,普通用户可以随意修改、删除其他用户的个人数据、管理员配置的业务规则数据,100%存在越权操作漏洞。
最坏影响
- 涉及用户隐私的敏感数据全部泄露,违反《个人信息保护法》等合规要求,可能面临监管处罚和用户民事索赔。
- 数据库被恶意用户批量写入垃圾数据、甚至全库清空,业务直接瘫痪,且被删除的数据如果没有备份几乎无法恢复。
- 核心业务数据被篡改(比如用户余额、交易记录、内容审核状态等),会造成直接的经济损失和品牌信誉损害。
外部人员获取访问权限的难度
门槛极低。
Firebase项目的前端配置参数(项目ID、API密钥等)本身就是公开的,任何人都可以轻易获取:
- 读权限不需要任何额外操作,拿到参数后直接调用Firebase SDK即可读取全库数据。
- 写权限仅需要完成一次你项目的身份认证即可,如果你的项目开启了匿名注册、邮箱注册等低门槛认证方式,恶意人员只需要几秒就能拿到合法的认证凭证,获得全库写权限。
基础修复建议
作为新手可以先从收窄权限范围开始优化:
- 取消全局
allow read: if true配置,仅给需要对外公开的集合(比如公开的内容列表、商品展示数据等)单独配置公开读权限,非公开数据必须加身份校验,比如仅文档所有者可读的配置:allow read: if request.auth != null && request.auth.uid == resource.data.owner_uid - 取消全局
allow write: if request.auth != null配置,按业务场景分集合配置写权限,比如普通用户只能修改自己创建的文档,禁止普通用户写入管理员配置类集合。
内容的提问来源于stack exchange,提问作者Jacob
相关产品推荐
相关产品推荐

