firebaser 在这里
很抱歉,如果电子邮件没有明确说明这些规则的不安全之处。保护用户数据的安全对于您提供的任何应用程序来说都是至关重要的一步,因此我将尝试在下面详细解释其工作原理。
您拥有的(默认)规则允许登录到您的后端的任何人对整个数据库进行完全读/写访问。这只是一个非常基本的安全层。
一方面,这比授予所有人访问您的数据库的权限更安全,至少他们必须登录。
另一方面,如果您在 Firebase 身份验证中启用任何身份验证提供程序,任何人都可以登录您的后端,即使不使用您的应用也是如此。根据提供者的不同,这可以像在浏览器的开发者控制台中运行一点 JavaScript 一样简单。一旦他们登录,他们就可以在您的数据库中读取和写入任何内容。这意味着他们可以使用 firebase.database().ref().delete() 这样的简单命令删除所有数据。
为了使数据访问更加安全,您需要更严格地控制每个登录用户可以执行的操作。例如,假设您在/users 下保留了包含每个用户信息的个人资料。您可能希望允许所有用户访问这些配置文件,但您肯定希望只允许用户修改他们自己的数据。您可以使用以下规则来保护它:
{
"rules": {
"users": {
".read": true,
"$user_id": {
// grants write access to the owner of this user account
// whose uid must exactly match the key ($user_id)
".write": "$user_id === auth.uid"
}
}
}
}
使用这些规则,每个人(甚至是未经身份验证的用户)都可以阅读所有个人资料。但是每个配置文件只能由其配置文件所在的用户修改。有关这方面的更多信息,请参阅Firebase documentation on securing user data。
除了确保对数据的所有访问都获得授权之外,您还需要确保存储的所有数据都符合您为应用制定的任何规则。例如,假设您想为用户存储两个属性:他们的姓名和年龄(仅出于示例的目的,实际上您可能会存储他们的出生日期)。因此,您可以将其存储为:
"users": {
"uidOfPuf": {
"name": "Frank van Puffelen",
"age": 48
}
}
为确保只能写入此数据,您可以使用以下规则:
{
"rules": {
"users": {
".read": true,
"$user_id": {
".write": "$user_id === auth.uid",
".validate": "data.hasChildren('name', 'age')",
"name": {
".validate": "data.isString()",
},
"age: {
".validate": "data.isNumber()",
},
"$other: {
".validate": false
}
}
}
}
}
这些规则确保每个用户配置文件都有一个 name 和 age 属性,分别带有字符串和数值。如果有人尝试写入任何其他属性,则写入将被拒绝。
以上内容是关于如何考虑保护您(用户)数据的快速入门。我建议您查看Firebase security documentation(和嵌入的视频)了解更多信息。
更新:自 2021 年 5 月起,您还可以使用 Firebase App Check 来限制对仅来自您的网站或应用程序的呼叫的访问。这是减少数据库滥用的另一种快速方法。但这种方法并非万无一失,因此您需要将应用检查与广泛保护的安全规则相结合,以实现细粒度控制。