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

Firestore Subscribers集合安全规则优化及数据安全性咨询

Firestore订阅功能安全增强方案及ID一致性验证

一、验证更新请求中邮箱与文档ID一致

因为你用邮箱作为文档ID,核心是确保写入/更新的数据里的邮箱和文档ID严格匹配,这可以通过Firestore安全规则强制实现,同时限制可写入的字段,避免恶意数据注入:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /Subscribers/{emailDocId} {
      // 创建文档:强制邮箱字段等于文档ID,且仅允许写入订阅日期字段
      allow create: if request.resource.data.email == emailDocId 
                    && request.resource.data.size() == 2 // 仅包含email和subscribeDate
                    && request.resource.data.keys().hasOnly(['email', 'subscribeDate']);
      
      // 更新文档:禁止修改邮箱字段(若业务需更新权限则改为request.resource.data.email == emailDocId),仅允许更新订阅日期
      allow update: if !('email' in request.resource.data)
                    && request.resource.data.size() == 1
                    && 'subscribeDate' in request.resource.data;
    }
  }
}

说明:

  • 创建时直接绑定文档ID与数据中的邮箱字段,杜绝ID和邮箱不匹配的情况;
  • 更新时直接禁止修改邮箱字段(如果业务不需要更新邮箱,这是最安全的做法),仅允许更新订阅日期,避免恶意篡改邮箱关联的文档。

二、额外安全防护措施

1. 启用Firebase App Check

App Check可以验证请求是否来自你的合法网站/应用,防止爬虫、恶意脚本批量提交无效邮箱。只需在前端集成App Check SDK,然后在Firestore安全规则中添加验证:

allow create, update: if request.app != null;

2. 前后端双重邮箱格式验证

  • 前端:用正则表达式先校验邮箱格式(比如/^[^\s@]+@[^\s@]+\.[^\s@]+$/),拦截明显无效的输入;
  • 后端/云函数:在写入Firestore前再次验证邮箱格式,避免前端校验被绕过。

3. 防止重复提交与垃圾数据

  • 前端:点击订阅按钮后立即禁用按钮,避免用户重复点击;
  • Firestore逻辑:如果文档已存在,仅更新subscribeDate而非重复创建,同时安全规则允许对已存在文档的更新操作。

4. 邮箱确认机制

添加邮件验证流程:用户提交邮箱后,发送带确认链接的邮件,用户点击后才将文档标记为verified: true;可通过云函数定时清理未验证的文档,同时后续邮件推送仅针对已验证的邮箱。

5. 限制请求频率

通过云函数处理订阅请求,配合IP限制,同一IP在短时间内只能提交有限次数的订阅请求,防止批量垃圾提交。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 08:37:13