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

无需身份认证场景下保护Firestore数据避免被批量爬取的方案咨询

Firestore 公开可读集合防批量爬取方案建议

核心疑问解答

首先明确:只要你的 Firestore 安全规则未限制集合级 list 权限,攻击者完全可以通过抓包获取的 Firebase 项目配置,自行初始化 Firebase 客户端,直接调用集合查询接口拉取全量文档,不需要遵循你前端原本的单条查询逻辑。

低成本优化方案(无需引入 SSR)

  • 方案1:调整 Firestore 安全规则限制查询权限

这是成本最低的优化手段,仅需修改安全规则即可拦截批量集合查询,规则示例如下:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /你的目标集合名/{docId} {
      // 保留单条文档读取权限
      allow get: if true;
      // 禁止集合级批量遍历请求
      allow list: if false;
      // 保留你原有写入权限校验逻辑
      allow write: if <原有写入校验条件>;
    }
  }
}

规则生效后,若要进一步避免攻击者枚举文档ID,可将集合内的文档ID设置为无规律的随机字符串,不要使用自增ID,大幅提升枚举爬取的成本。

  • 方案2:接入 Firebase App Check 限制请求来源

仅需少量前端代码修改即可实现,通过 App Check 绑定你的站点域名,Firebase 会自动拦截非你站点来源的请求:

  1. Firebase 后台开启 App Check,使用 reCAPTCHA v3 验证方式,绑定你的站点域名
  2. 前端 Next.js 项目中初始化 Firebase 时新增 App Check 初始化逻辑,仅几行代码即可完成
    配置完成后,未通过站点 reCAPTCHA 校验的请求会被 Firebase 直接拒绝,哪怕攻击者拿到项目配置也无法发起合法的 Firestore 请求。
  • 方案3:新增 Cloud Function 作为查询中间层

如果你确实存在合法的集合查询需求(比如分页列表),可以用云函数做统一的查询入口:

  1. 调整 Firestore 安全规则,禁止所有前端直接访问的读写请求,仅开放给云函数的服务账号权限
  2. 前端所有查询请求发往云函数,在云函数侧做参数校验、请求频率限制、Origin 来源校验,避免批量爬取
    以上三种方案可以根据你的实际场景组合使用,整体开发成本远低于为该需求单独改造 SSR 逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:36:04