Firestore与Firebase Storage安全规则:防止外部注册问题咨询
Firebase安全规则与API密钥限制的问题解答
仅通过限制API密钥的使用域名不足以阻止外部人员注册并登录你的应用,这种客户端层面的防护很容易被绕过,必须搭配其他安全措施才能有效降低风险。
为什么域名限制不够?
- 域名校验是在客户端完成的,攻击者可以通过修改请求头、使用代理工具,甚至在你允许的域名下搭建恶意页面,轻松绕过限制调用Firebase的认证接口。
- React应用的API密钥会被打包到前端代码中,任何人都能通过查看页面源码提取密钥,拿到密钥后只要绕过域名限制,就能调用
createUserWithEmailAndPassword注册账号。
建议补充的安全措施
启用Firebase App Check
App Check能验证请求是否来自你的合法应用,Web端可搭配reCAPTCHA v3使用,能有效拦截自动化恶意请求。配置后,只有通过验证的请求才能访问Firebase的认证、Firestore和Storage服务,比单纯的域名限制可靠得多。开启注册频率限制
在Firebase认证控制台启用「暴力保护」功能,限制同一IP或邮箱前缀的注册请求频率,防止攻击者批量创建账号。也可以通过云函数在注册环节添加额外校验,比如结合验证码进一步过滤恶意请求。监控异常行为
启用Firebase Analytics和Cloud Monitoring,设置告警规则——比如短时间内出现大量新用户注册、异常高频读写操作时,及时触发通知,方便你快速介入处理。补充细粒度规则(可选)
即使允许所有登录用户读写,也可以针对敏感路径添加基础限制,比如Firestore里限制文档大小、禁止删除特定数据,Storage里限制上传文件的类型和大小,避免恶意用户破坏数据。示例规则:// Firestore示例 service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if request.auth != null && request.resource.data.size() < 1000; // 限制单文档大小 } } } // Storage示例 service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if request.auth != null && request.resource.contentType.matches('image/.*') // 仅允许图片上传 && request.resource.size < 5 * 1024 * 1024; // 限制文件大小不超过5MB } } }
如果你的业务确实需要所有登录用户拥有完全的读写权限,以上措施能在满足需求的同时,大幅提升应用的安全性,弥补单纯域名限制的短板。
内容的提问来源于stack exchange,提问作者Francisco Venes
相关产品推荐
相关产品推荐

