问题描述
我的Firebase Cloud数据库中具有以下规则:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read,write: if true;
}
}
}
我不断收到这样的电子邮件:
我们检测到您的安全规则存在以下问题:
- 任何用户都可以读取您的整个数据库
- 任何用户都可以写入您的整个数据库
在我们的主屏幕上,用户只能通过使用电子邮件+密码或通过短信获得的电话号码+代码签名来进入该应用程序。两者都可以使用Firebase身份验证服务。在那种情况下应该有什么规则?
解决方法
如果只想允许经过身份验证的用户访问,则可以如下修改规则:
// Allow read/write access on all documents to any user signed in to the application
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read,write: if request.auth != null;
}
}
}
话虽如此,请注意以下两点:
- 通过执行
/{document=**}
(即使用recursive wildcard),您可以将这些规则应用于Firestore数据库的所有集合/文档。最好为每个集合明确定义规则,以便以更细粒度的方式控制对每个集合的访问。这样,您就可以避免以后在创建新的非公开集合时出现任何错误,而忘记适应安全规则。 - 别忘了拥有Firebase项目的Web API密钥(在应用程序的源代码中并不难找到)的任何人都可以为Firebase项目创建帐户,例如,只需简单地调用Firebase Auth REST API。换句话说,此规则仅允许经过身份验证的用户访问您的数据库,但是默认情况下,任何人都可以成为经过身份验证的用户。