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

Firebase实时数据库安全规则配置:防止机器人高频发帖需求

Firebase实时数据库安全规则:限制发帖频率(每秒1条)

需求回顾

  • 仅认证用户可写入
  • 新增帖子(items下的新节点)需满足:当前帖子created_timestamp与该用户在同一群组下的最后一条帖子时间差≥1000ms
  • 批量删除/更新无额外限制,仅需认证

实现方案

利用Firebase实时数据库规则的查询能力,针对新增操作校验用户最近的发帖时间,同时放开更新/删除操作的限制。以下是完整规则:

{
  "rules": {
    "new_groups": {
      ".read": "auth.uid != null",
      "$groupId": {
        "items": {
          "$itemId": {
            ".write": "auth.uid != null && (
              // 更新或删除操作:仅需认证
              (data.exists() && newData.exists()) || !newData.exists() ||
              // 新增操作:需满足时间限制+作者匹配
              (!data.exists() && newData.exists() && 
                newData.child('authorId').val() === auth.uid &&
                // 查询该用户在当前群组的最后一条帖子,验证时间差
                (!root.child('new_groups').child($groupId).child('items').orderByChild('authorId').equalTo(auth.uid).limitToLast(1).exists() || 
                  newData.child('created_timestamp').val() - root.child('new_groups').child($groupId).child('items').orderByChild('authorId').equalTo(auth.uid).limitToLast(1).child('created_timestamp').val() >= 1000)
              )
            )"
          }
        }
      }
    }
  }
}

规则关键点说明

  • 基础认证校验:所有写入操作都要求auth.uid != null,满足需求1。
  • 操作类型区分:
    • 更新(data.exists() && newData.exists())或删除(!newData.exists())时,仅需认证,满足需求3中批量操作无额外限制的要求。
    • 新增(!data.exists() && newData.exists())时,额外校验:
      1. authorId与当前用户UID一致,确保用户只能发布自己的帖子。
      2. 查询该用户在当前群组下的最后一条帖子:
        • 若用户是首次发帖(无历史记录),直接允许。
        • 若有历史记录,计算当前时间戳与最后一条帖子的时间差≥1000ms,满足需求2的频率限制。

注意事项

  1. 客户端写入时,created_timestamp必须使用Firebase服务器时间(通过firebase.database.ServerValue.TIMESTAMP获取),避免客户端篡改时间绕过限制。
  2. 规则默认限制单个群组内的发帖频率,若需全局跨群组限制,可修改查询路径为遍历所有群组的items节点,但性能上建议按群组拆分限制。

内容的提问来源于stack exchange,提问作者Tomas Ward

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:22:14