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

Firebase实时数据库安全配置咨询:确保用户仅访问自身数据

Firebase实时数据库安全规则评估与优化方案

当前规则的核心安全漏洞

你现在的规则存在严重问题:$account节点的.read设为true意味着任何知道以太坊钱包地址的人都能读取对应账户的数据,根本做不到“仅用户自身访问”。比如只要有人拿到了account1的地址,哪怕不是该账户的所有者,也能直接调用get(child(dbRef, "accounts/account1"))读取数据,完全不符合你的安全需求。

必须的核心改进:绑定身份与钱包地址

要确保只有账户所有者能访问数据,必须把Firebase Auth的用户身份和以太坊钱包地址绑定,让安全规则能验证请求者的身份是否匹配目标账户:

步骤1:实现以太坊钱包登录Firebase

通过Firebase Auth的自定义认证机制,让用户用以太坊钱包签名登录,将钱包地址存入用户的自定义声明(customClaims)或Auth用户资料中。比如后端生成自定义Token时,把钱包地址作为walletAddress字段加入token。

步骤2:修改安全规则验证身份

更新规则,只有当请求者的认证信息中的钱包地址与$account完全匹配时,才允许读取:

{
  "rules": {
    ".read": false,
    ".write": false,
    "accounts": {
      "$account": {
        ".read": "$account === auth.token.walletAddress",
        ".write": "$account === auth.token.walletAddress" // 若需要用户修改自身数据则保留,否则设为false
      }
    }
  }
}

这样,只有通过认证且钱包地址匹配的用户,才能访问对应账户的数据,彻底杜绝了陌生人仅凭地址就能读取的问题。

额外安全加固措施

  • 限制写入操作:如果用户不需要修改数据,保持.write: false;若需要写入,除了身份验证,还可添加字段验证,比如限定只能修改特定字段、字段格式符合要求(例如以太坊地址格式校验):
    "$account": {
      ".write": "$account === auth.token.walletAddress && newData.hasChildren(['item1', 'item2']) && newData.child('item1').isString()",
      ".read": "$account === auth.token.walletAddress"
    }
    
  • 防止枚举攻击:虽然以太坊地址枚举难度高,但可通过Firebase Auth的登录速率限制、数据库访问速率限制,降低暴力枚举的风险。
  • 客户端加密敏感数据:对于隐私数据,在客户端加密后再存入数据库,即使数据库出现安全漏洞,原始数据也不会泄露。
  • 定期测试安全规则:使用Firebase控制台的规则模拟器,模拟未认证用户、其他账户用户的请求,验证规则是否能有效拦截非法访问。
  • 监控访问日志:通过Firebase控制台的监控面板,跟踪数据库的访问记录,及时发现异常请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:12:34