Firestore Rules使用疑问:桌面应用序列号存储的安全配置方案
Firestore序列号激活场景安全改造最优方案
核心改造思路
完全收口序列号相关的读写逻辑,避免客户端直接操作核心数据库,用服务端做所有校验和数据写入,从规则层面封死未授权访问的可能。
具体落地步骤
1. 第一步先修改Firestore安全规则
直接删除原有公开读写配置,替换为默认拒绝所有客户端访问,仅开放服务账号权限:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { // 核心序列号集合仅允许服务账号访问 match /serial_codes/{code} { allow read, write: if request.auth.token.email == "your-cloud-functions-service-account@appspot.gserviceaccount.com"; } // 其余路径默认全部拒绝 match /{document=**} { allow read, write: if false; } } }
2. 替换客户端直接写库逻辑
把原有桌面端点击激活后直接调用Firestore Rest API写数据的逻辑,改为调用你部署的Cloud Functions HTTPS接口,仅给接口传序列号、当前设备的硬件标识两个参数即可。
3. 服务端接口做全链路校验
接口侧按顺序完成以下校验,全部通过后再操作数据库:
- 先验签:桌面端内置一个非公开的固定盐值,传参时将「序列号+设备标识+盐」做SHA256哈希,接口侧用同样规则计算哈希比对,不匹配直接拒绝请求,过滤掉无意义的恶意Curl请求
- 校验序列号有效性:查询Firestore中是否存在该序列号,且状态为未使用
- 校验通过后由服务端写入激活记录,标记序列号为已使用,绑定对应设备标识,返回激活成功结果给客户端
4. 可选加固方案
- 给接口加请求频次限制,同一IP1分钟内最多请求3次,避免暴力枚举序列号
- 所有激活请求全留痕,定期排查批量请求无效序列号的IP,直接封禁
注意:绝对不要在桌面端安装包中硬编码Firestore服务账号密钥、管理员权限凭证,一旦被逆向会导致数据库完全失控。
内容的提问来源于stack exchange,提问作者Ian Barber
相关产品推荐
相关产品推荐

