如何设置Firebase Realtime Database仅对自有用户可读?
Firebase实时数据库在线状态检测安全规则配置方案
根因分析
- 初始全库
auth != null可读规则被判定存在安全风险,是因为该规则属于过度授权:所有登录用户可读取数据库全量数据,若后续新增业务数据会直接导致数据泄露。 - 全禁规则下安卓端功能失效、iOS端异常正常的原因:iOS端大概率缓存了之前的权限验证结果,属于不可复现的偶发异常。官方在线状态方案需要读写存储用户在线状态的自定义节点,全禁规则会拦截这部分请求导致功能失效。
/.info/connected为系统保留路径,不受自定义规则约束,不会被拦截。
适配方案
由于你当前数据库仅用于在线状态检测,无其他存储内容,按照最小权限原则配置规则即可,假设你按照官方方案使用/presence作为在线状态存储根路径,每个用户的在线状态存在自己uid对应的子节点下,规则配置如下:
{ "rules": { "presence": { "$uid": { // 仅允许用户读写自身的在线状态节点 ".read": "auth != null && auth.uid == $uid", ".write": "auth != null && auth.uid == $uid" } }, // 其余所有路径默认禁止读写,避免后续新增数据的安全风险 ".read": false, ".write": false } }
如果你的在线状态存储路径和上述假设不同,替换规则中的路径为实际使用的路径即可。
特殊场景适配
如果你的业务需要所有登录用户都能查看其他用户的在线状态,可以把presence节点的读权限调整为全登录用户可见:
{ "rules": { "presence": { ".read": "auth != null", "$uid": { ".write": "auth != null && auth.uid == $uid" } }, ".read": false, ".write": false } }
以上规则均符合Firebase安全规范,不会触发安全风险告警,同时完全满足在线状态检测的功能要求。
内容的提问来源于stack exchange,提问作者Icare
相关产品推荐
相关产品推荐

