You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无认证Firebase实时数据库防根节点误删的安全规则配置问题

正确的Firebase实时数据库安全规则如下

{
  "rules": {
    // 根节点默认禁用所有读写,从根源避免全局误操作
    ".read": false,
    ".write": false,

    // ChatListing节点规则配置
    "ChatListing": {
      ".read": true,
      // 仅允许写入有效数据,自动拦截删除操作(删除时newData为null,exists()返回false)
      ".write": "newData.exists()",
      // 子节点继承上层规则即可,无需额外配置
      "$userGroup": {
        "$chatSessionId": {
          ".read": true,
          ".write": "newData.exists()"
        }
      }
    },

    // 根节点下的聊天密钥节点规则配置(通配符匹配除ChatListing外的所有根级子节点)
    "$chatId": {
      ".read": true,
      // 直接操作聊天密钥根节点时,仅允许新增,禁止修改、删除已有节点
      ".write": "!data.exists() && newData.exists()",
      // 聊天密钥节点下的消息子节点放开读写,支持正常收发消息
      "$messageId": {
        ".read": true,
        ".write": true
      }
    }
  }
}

规则逻辑说明

  • 根节点默认关闭所有权限,彻底杜绝误调用根节点setValues清空全库的风险
  • ChatListing节点完全匹配需求:允许创建、读取、修改元数据,禁止任何删除操作
  • 聊天密钥节点完全匹配需求:仅允许在根层级新增会话节点、读取已有会话数据,会话内部的消息收发不受限制

原有规则失效原因

你之前配置的根节点.write: "!data.exists() || !newData.exists()"等价于允许「向空节点写入数据」和「删除已有节点」,刚好支持了在根节点调用setValues清空全库的操作,完全不符合安全要求。

内容的提问来源于stack exchange,提问作者Faizan Naeem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:45:02