Firebase Firestore修改规则后仍收到不安全规则告警如何解决
问题1解答
告警中提到的「他人可修改我的数据库」不局限于通过你的应用操作:你的Firebase项目的客户端配置本身就是公开在前端代码中的,任何人都可以抓取到配置后,直接调用Firebase官方SDK/API连接你的数据库,不需要经过你的应用前端逻辑校验。只要对方通过任意方式拿到了有效认证的UID(比如在你的应用正常注册登录获取),就能按照规则权限操作数据库。
问题2解答
按照你当前设置的规则,完全存在被认证用户批量删除全部数据库数据的可能:你的规则用/{document=**}匹配了全局所有文档路径,只要是有有效UID的认证用户,就拥有所有文档的写入权限(包含创建、修改、删除三类操作),恶意用户只需要写一段简单的脚本遍历所有集合、批量删除文档即可清空你的整库数据。
你修改规则后仍然收到告警的原因
你当前的规则仍然在Firebase的风险规则判定范围内,原因有两点:
- 全局读权限
allow read: if true意味着任何人不需要认证就能爬取你数据库的所有内容 - 全局写权限只要认证就放行,没有任何操作范围、操作类型的限制,属于典型的宽松风险规则
另外注意你贴出的规则里match / databases / {database} / documents路径里多了多余空格,实际部署时需要删掉空格,否则规则不会正常生效。
适配你业务需求的规则优化方案
你的业务需求是「仅已认证用户可以读取和创建内容」,可以参考以下规则调整,调整后就不会再触发风险告警:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { // 替换为你实际的业务集合名,不要用全局通配符匹配所有文档 match /content/{contentId} { // 仅认证用户可读取内容 allow read: if request.auth != null; // 仅认证用户可创建内容,不允许修改、删除已有内容 allow create: if request.auth != null; allow update, delete: if false; // 如果后续需要允许用户修改/删除自己发布的内容,可以把上面的update、delete规则替换为下面的 // allow update, delete: if request.auth != null && resource.data.publisher_uid == request.auth.uid; } // 有其他业务集合时,按照同样逻辑逐个定义权限即可 } }
内容的提问来源于stack exchange,提问作者Un poco de todos
相关产品推荐
相关产品推荐

