Realtime Database 安全规则中如何使用md5哈希功能?
Firebase Realtime Database 安全规则MD5哈希用法解答
你当前的写法是不正确的。Firebase Realtime Database 安全规则内置的hashing.md5()方法默认返回原始字节缓冲区,而非常见的32位十六进制MD5哈希字符串,直接用来匹配sharedEmails下的子节点会始终无法匹配,导致.read权限判断失败。
正确使用方式
需要对hashing.md5()的返回值调用toHex()方法,将字节缓冲区转换为十六进制字符串后再做匹配,修正后的规则如下:
{ "rules": { "users": { "$uid": { "$experiment_id": { ".read": "data.child('sharedEmails').child(hashing.md5(auth.email).toHex()).val() === true", ".write": "auth != null && auth.uid == $uid" } } } } }
你原有的规则配置截图参考:
额外注意事项
- 存入
sharedEmails节点的邮箱哈希值,必须和规则侧的处理逻辑保持一致,也用MD5十六进制格式存储,避免出现格式不匹配的问题 - 邮箱存在大小写差异的可能,建议存储哈希时统一将邮箱转为小写后再哈希,规则侧同步调整为
hashing.md5(auth.email.toLowerCase()).toHex(),避免因大小写不一致导致匹配失败 - MD5算法已被证实存在哈希碰撞风险,如果你的业务场景对安全性要求较高,建议优先选择规则内置的
hashing.sha256()等更安全的哈希算法
内容的提问来源于stack exchange,提问作者Kamilski81
相关产品推荐
相关产品推荐

