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

如何防止Firestore数据库遭受计费攻击及DDOS攻击?

针对Firestore计费攻击的防护方案

1. 利用Firebase Auth自定义声明实现无读取成本的速率限制

在安全规则中直接调用ID Token中的自定义声明,无需读取用户文档即可校验请求频率,彻底避免额外读取成本:

  • 后端(如Cloud Functions)在用户每次合法赚取金币后,更新其Auth自定义声明中的last_claim_timestamp为当前时间戳
  • 安全规则中校验request.time与request.auth.token.last_claim_timestamp的间隔(比如设为10秒),拒绝过于频繁的请求
match /users/{userId} {
  allow update: if request.auth != null && request.auth.uid == userId
    && request.time > request.auth.token.last_claim_timestamp + duration.value(10, 's')
    && request.resource.data.gold == resource.data.gold + 1;
}

注意:自定义声明每小时最多更新100次/用户,适配游戏中低频率的金币获取场景(比如获胜操作至少间隔数秒)

2. 用Cloud Functions封装写入逻辑,在服务端做速率限制

将客户端直接写Firestore的逻辑改为调用Cloud Functions,在服务层实现更灵活的流量控制:

  • 客户端调用Function请求添加金币,而非直接操作Firestore
  • Function中使用内存缓存(如node-cache)或Redis记录用户最近请求时间,校验频率(比如每分钟最多5次请求)
  • 仅通过校验的请求才执行Firestore写入,无效请求直接拒绝,完全规避Firestore的无效读写成本
  • 同时在Function中添加游戏胜利合法性校验,防止客户端伪造胜利请求

3. 启用Firebase App Check拦截非法客户端请求

App Check可验证请求来自你的合法安卓应用,阻止黑客使用伪造SDK或脚本发起批量请求:

  • 在安卓应用中集成App Check(使用SafetyNet或Play Integrity)
  • 在Firebase控制台启用Firestore的App Check保护,仅允许通过验证的请求访问

4. 设置Firestore配额与账单告警

通过配额和告警提前防范超额费用:

  • 在Firebase控制台设置Firestore的每日读写操作限额,超过限额后自动拒绝请求
  • 配置Google Cloud账单告警,当费用达到阈值时立即通知,及时处理异常流量

5. 优化安全规则,减少不必要的读取

确保安全规则仅在必要时读取文档数据:

  • 避免在规则中使用get()读取额外文档,尽量使用resource.data或request.auth中的数据
  • 对于金币添加操作,严格校验request.resource.data.gold只能比resource.data.gold多1,防止批量修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 05:53:19