无需身份认证场景下保护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 会自动拦截非你站点来源的请求:
- Firebase 后台开启 App Check,使用 reCAPTCHA v3 验证方式,绑定你的站点域名
- 前端 Next.js 项目中初始化 Firebase 时新增 App Check 初始化逻辑,仅几行代码即可完成
配置完成后,未通过站点 reCAPTCHA 校验的请求会被 Firebase 直接拒绝,哪怕攻击者拿到项目配置也无法发起合法的 Firestore 请求。
方案3:新增 Cloud Function 作为查询中间层
如果你确实存在合法的集合查询需求(比如分页列表),可以用云函数做统一的查询入口:
- 调整 Firestore 安全规则,禁止所有前端直接访问的读写请求,仅开放给云函数的服务账号权限
- 前端所有查询请求发往云函数,在云函数侧做参数校验、请求频率限制、Origin 来源校验,避免批量爬取
以上三种方案可以根据你的实际场景组合使用,整体开发成本远低于为该需求单独改造 SSR 逻辑。
内容的提问来源于stack exchange,提问作者havardsj
相关产品推荐
相关产品推荐

