F0r*_*00b 9 firebase firebase-authentication firebase-realtime-database firebase-security-rules
我最近收到来自firebase的电子邮件,告诉我我的实时数据库有不安全的规则.这些是我设定的规则:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
Run Code Online (Sandbox Code Playgroud)
这不是一个安全的规则吗?
电子邮件/密码是我启用的唯一登录方式.
Fra*_*len 31
这里有一个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"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
有了这些规则,每个人(甚至是未经过身份验证的用户)都可以阅读所有配置文件 但每个配置文件只能由其配置文件的用户修改.有关详细信息,请参阅有关保护用户数据的Firebase文档.
除了确保所有数据访问权限都得到授权之外,您还需要确保存储的所有数据对您应用的任何规则都有效.例如,假设您要为用户存储两个属性:他们的名字和他们的年龄(仅为了示例,实际上您可能会存储他们的出生日期).所以你可以将它存储为:
"users": {
"uidOfPuf": {
"name": "Frank van Puffelen",
"age": 48
}
}
Run Code Online (Sandbox Code Playgroud)
要确保只能写入此数据,您可以使用以下规则:
{
"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
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这些规则确保每个用户配置文件有一个name和age财产分别与字符串和数值.如果有人试图编写任何其他属性,则拒绝写入.
以上是关于如何考虑保护(用户)数据的快速入门.我建议您查看Firebase安全文档(以及嵌入式视频)以获取更多信息.
Him*_*der 11
您还可以通过访问电子邮件底部的链接将警报静音。
https://console.firebase.google.com/subscriptions/project/ <YOUR_PROJECT_NAME>
| 归档时间: |
|
| 查看次数: |
2909 次 |
| 最近记录: |