如何防范Chrome/Tampermonkey插件攻击Firebase实时数据库?
这确实是Firebase新手很容易踩的坑——看着客户端代码里明晃晃的apiKey这些配置,总觉得心里发慌,担心别人拿到就可以随便操作数据库。但其实你得先搞清楚一个关键事实:Firebase的客户端配置信息本来就是设计成公开的,官方文档里也明确说明了这一点,所以纠结怎么“隐藏”它们完全是走错了方向,真正的安全防线在别的地方。
下面给你梳理几个核心的防范手段,既能保住实时数据库的特性,又能把安全风险降到最低:
1. 配置严格的Firebase安全规则
这是最核心的防护手段,没有之一。Firebase的数据库(实时数据库、Firestore)和云存储都支持细粒度的安全规则,你可以精确控制谁能读写哪些数据。
比如针对实时数据库,你可以写这样的规则,只允许已认证的用户读写自己的数据:
{ "rules": { "users": { "$uid": { // 只有登录用户能读取自己的节点 ".read": "$uid === auth.uid", // 只有登录用户能修改自己的节点 ".write": "$uid === auth.uid" } } } }
就算攻击者拿到你的配置,初始化了Firebase App,只要他没有合法的用户身份,或者试图访问不属于他的数据,安全规则就会直接拒绝他的请求。
2. 强化身份验证机制
确保所有敏感操作都要求用户先通过Firebase Auth进行认证,不要用匿名认证处理敏感数据。你可以启用邮箱密码、Google登录、Apple登录等官方支持的认证方式,并且在安全规则里强制校验auth对象的存在——比如给所有敏感数据节点加上.read": "auth !== null"和.write": "auth !== null"的基础限制。
另外,还可以启用Firebase Auth的多因素认证(MFA),进一步提升账号的安全性,防止攻击者通过盗取普通凭证来获取数据权限。
3. 启用Firebase App Check
这是Firebase提供的额外防护层,用来验证请求是否来自你的合法应用(比如你的Web App、官方iOS/Android App),而不是攻击者随便搭的脚本。
- 对于Web端,你可以集成reCAPTCHA v3,它会在后台自动验证请求来源的合法性,不会影响用户体验;
- 对于移动端,可以使用App Check的设备证书验证。
一旦启用App Check,就算攻击者拿到你的客户端配置,他发起的请求也会因为无法通过App Check的验证而被Firebase服务拒绝,从根源上阻断非法请求。
4. 用Cloud Functions处理敏感操作
如果有些操作确实不适合在客户端执行(比如修改全局数据、执行复杂的业务逻辑),可以把这些逻辑放到Firebase Cloud Functions里,客户端只通过调用云函数来完成操作。
这样一来,客户端根本不需要直接接触敏感数据的读写权限,所有的权限校验和逻辑处理都在云端完成,既保留了Firebase的实时特性(云函数可以监听数据库事件,或者通过Firebase SDK实时同步数据),又彻底隔离了客户端的风险。
对你之前方案的补充说明
- 用匿名函数包裹代码:确实没用,因为浏览器最终会解析所有JS代码,攻击者只要通过开发者工具或者抓包就能拿到配置,正则解析更是小菜一碟;
- 转Node.js后端+REST API:完全没必要,Firebase本身已经提供了成熟的实时数据能力,只要配置好安全规则和App Check,完全可以兼顾安全和实时性,额外搞Socket.io反而增加了复杂度。
总结一下:别再把精力浪费在“隐藏配置”上了,Firebase的安全模型从一开始就没指望靠隐藏配置来保障安全。把安全规则、身份验证、App Check这几层防护做好,就算配置公开,攻击者也没法对你的数据库造成实质性伤害。
内容的提问来源于stack exchange,提问作者Faizan Anwer Ali

