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

Firestore规则中验证加密CRC值一致性的技术问题

访问节点时的哈希值验证实现方案

我正在实现一项功能:用户访问特定节点/testcrc/{testId}时,需验证request.auth.token.crc(已加密的SHA256哈希值)与resource.data.crc原始值加密后的结果是否相等。当前使用的安全规则代码如下:

match /testcrc/{testId} {
     allow read: if request.auth.token.crc == hashing.sha256(resource.data.crc.utf8());
}

已知信息:

  • request.auth.token.crc的哈希值为:9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
  • resource.data.crc的原始值为test

逻辑验证与优化注意事项

  1. 哈希匹配有效性:test的SHA256哈希值恰好就是9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08,所以当前规则的核心逻辑是成立的,只要resource.data.crc存储的是正确的原始值,验证就能通过。
  2. 数据一致性检查:确保resource.data.crc存储的是纯字符串test,没有额外的空格、换行或隐藏字符,否则加密后的哈希值会改变,导致验证失败。
  3. 大小写统一处理:hashing.sha256()返回的是小写十六进制字符串,如果request.auth.token.crc的值是大写格式,需在规则中加入lower()统一大小写,避免匹配失败:
    match /testcrc/{testId} {
         allow read: if request.auth.token.crc.lower() == hashing.sha256(resource.data.crc.utf8());
    }
    
  4. 代码简化:如果resource.data.crc本身就是字符串类型,utf8()调用可以省略,直接使用resource.data.crc即可,不影响加密结果:
    match /testcrc/{testId} {
         allow read: if request.auth.token.crc == hashing.sha256(resource.data.crc);
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 13:21:00