Firebase Realtime Database 配置登录校验规则仍提示不安全如何解决
警告触发原因
你当前配置的规则仅完成了最基础的登录状态校验,没有做数据权限的细粒度限制:任意完成登录的用户都可以访问、修改、删除整个数据库的所有数据,包括其他用户的私有数据,存在严重的数据泄露和篡改风险,因此平台会触发安全警告。
规则调整方案
场景1:用户仅可读写自身私有数据
若你的数据库存储结构按用户UID划分目录,示例结构如下:
{ "users": { "xxx用户1的UIDxxx": { "昵称": "用户1", "私有数据": "xxx" }, "xxx用户2的UIDxxx": { "昵称": "用户2", "私有数据": "xxx" } } }
可将规则调整为仅允许用户读写自身UID对应的目录:
{ "rules": { "users": { "$uid": { ".read": "$uid === auth.uid", ".write": "$uid === auth.uid" } } // 其他业务路径的权限单独配置,不要在根节点设置全局读写规则 } }
场景2:公开数据允许所有登录用户读、仅管理员可写
若存在公共数据目录(比如public)需要开放读权限,可以单独配置该路径规则,同时限制写权限仅管理员拥有,示例规则如下(前提是你已在用户数据中配置了isAdmin标识字段判断管理员身份):
{ "rules": { "public": { ".read": "auth.uid != null", ".write": "root.child('users').child(auth.uid).child('isAdmin').val() === true" } } }
通用优化建议
- 禁止在根节点配置全局读写权限,所有权限按业务路径拆分配置
- 写规则可额外增加字段格式校验,限制写入的数据类型、字段范围,避免非法数据入库
- 调整规则前可使用Firebase控制台自带的规则 playground 工具,模拟不同用户的读写请求,确认权限配置符合预期
内容的提问来源于stack exchange,提问作者Rathod Ruturaj sinh
相关产品推荐
相关产品推荐

