我为自己创建的游戏有一个非常简单的Firestore数据库。我有一个用户集合,其中包含文档,每个文档都指定了用户的用户名,电子邮件地址和高分。
我希望每个人都能读取数据库中每个人的高分和用户名,因为我有一个列表,列出了每个用户的高分和用户名。
但是,我只希望个人能够在登录后写数据库(即提交自己的高分)。
因此,我有以下安全规则:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
match /Users/{document=**} {
allow read: if true;
}
}
}
我的问题是,这安全吗?我猜这意味着从技术上来说,具有恶意意图的用户可以阅读每位用户的电子邮件。是否有办法通过某种方式指定只有每个人都能够读取每个用户文档的highscore和username属性,来防止这种情况发生?
此外,此设置确实可以防止恶意用户写入数据库,请更正(在此处编辑:我想这不是-我现在通过阅读此处的文档https://firebase.google.com/docs/firestore/security/rules-structure来对此进行研究)>
我对Firebase并不陌生,但是对它的安全规则却并不陌生,因为我以前没有将应用程序推入生产环境,并且想确保我不会留下任何漏洞,因此此处提供了任何反馈/指导表示赞赏。
答案 0 :(得分:2)
正如我在your previous question上所解释的那样,任何人都可以从您的应用中获取配置数据,并使用该数据调用Firebase API。
这安全吗?
只有您可以确定您的规则对于您的用例是否正确。
这些规则允许任何人阅读/Users
集合中的所有文档。此外,它们允许任何经过身份验证的用户读取和写入所有文档。如果这是您要支持的用例,那么这些是适合您的正确规则。
因此,如果您在Firebase身份验证中启用了匿名身份验证提供程序,则任何人都可以获取您的配置数据,编写一个最小的网页并调用firebase.auth().signInAnonymously()
,然后使用firebase.firestore().collection("Users").get()
读取所有用户数据。 / p>
以这种问答方式很难保护数据库的安全。相反,我建议您: