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

无用户专属安全规则时存储Firebase认证令牌是否安全

首先明确结论:绝对不能直接移除安全规则,放开公共读写权限后所有人都可以遍历、篡改、删除你ot-auth-codes路径下的所有数据,恶意攻击者可以轻松窃取用户认证令牌,风险极高。

你可以通过两种可行方案实现安全防护:

方案1:调整路径结构,用高强度UUID做鉴权标识

你的认证UUID本身就是密码学安全的随机值(请确保使用crypto.randomUUID()这类安全方法生成v4 UUID,不要用非安全随机数实现),猜解、碰撞概率可以忽略,可直接作为权限判断依据,规则配置如下:

{
  "rules": {
    "ot-auth-codes": {
      // 禁止列取所有子节点,防止恶意遍历UUID
      ".read": false,
      // 普通客户端禁止直接写入,仅Cloud Function的Admin SDK可写(Admin SDK默认绕过安全规则)
      ".write": false,
      "$authUuid": {
        // 只有知道完整UUID的主体(你的Electron端)可以读取对应节点
        ".read": true
      }
    }
  }
}

对应修改Electron端的数据库路径即可,不需要依赖登录用户UID:

function createOAuthDatabaseEntry(
    database: Database,
    electronAuthUuid: string,
): DatabaseReference {
    return ref(database, `ot-auth-codes/${electronAuthUuid}`);
}

可以额外给节点配置10分钟TTL自动删除,降低残留数据泄露风险。

方案2:Electron端先启用匿名登录

用户点击谷歌登录按钮时,先调用Firebase匿名登录接口给Electron端的Auth实例生成临时匿名用户,这时候就能拿到合法的currentUser.uid,可以继续沿用你原本的用户专属路径规则:

// 点击登录按钮时先执行匿名登录
import { signInAnonymously } from "firebase/auth";
await signInAnonymously(auth);
// 后续就可以正常获取auth.currentUser.uid生成路径了

后续Electron端拿到Cloud Function写入的自定义令牌后,再调用signInWithCustomToken替换掉匿名用户身份即可,整个过程对用户无感知,安全规则和你原本的设计完全兼容。

内容的提问来源于stack exchange,提问作者Mr. Robot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:36:03