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

修改Firebase安全规则3天后仍收到整改提醒的解决咨询

现有规则触发安全告警的核心原因

你当前配置的规则仍存在Firebase认定的高危公开访问漏洞,因此会持续收到锁库告警,具体问题如下:

  • 全局配置了无任何校验条件的allow read;,所有匿名未登录用户都可以读取全库任意文档,属于严重的公开读风险
  • 写规则存在逻辑冲突:你在最前面配置的allow write: if request.auth != null;会覆盖后续的create、update限制——Firestore安全规则的判定逻辑是只要匹配任意一条allow规则就放行请求,这条规则等于给所有登录用户开放了全库任意文档的写入、删除权限,你后面写的isMine、时间戳校验完全不会生效
  • 未对delete操作做权限约束,结合前面的全局write规则,登录用户可以随意删除全库任意文档
修正后的规则参考

先删除冲突的全局write规则,再收紧全局读权限,补充删除操作的权限校验:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      // 移除原有的无限制全局write规则,拆分细粒度权限
      // 全局读默认收紧为仅用户可读取自身id对应的文档,如果你有公开访问的集合,单独针对该集合路径配置读规则即可,禁止全局放开无限制读
      allow read: if request.auth != null && request.auth.uid == resource.id;
      allow create: if isMine() && hasTimestamp();
      allow update: if isMine() && hasTimestamp() && isCalm();
      // 补充删除操作的权限限制,仅允许文档所属用户操作
      allow delete: if isMine();

      function isMine() {
        return request.resource.id == request.auth.uid;
      }
      function hasTimestamp() {
        return request.resource.data.timestamp == request.time;
      }
      function isCalm() {
        return request.time > resource.data.timestamp + duration.value(20, 's');
      }
    }
  }
}
配置后校验要点
  • 规则发布后,用Firebase控制台自带的规则模拟器测试未登录访问、非文档所属用户的读写删请求,确认全部被拦截
  • 禁止在根通配路径/{document=**}下配置无任何身份、归属校验的allow read/allow write规则,只要存在这类高危配置,Firebase就会持续发送告警,到期直接锁库
  • 如果业务需要部分集合公开可读(比如公开内容、公告类集合),单独匹配对应集合路径配置读规则,不要全局放开权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:18:43