Firebase电子邮件说我的实时数据库有不安全的规则

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)

这些规则确保每个用户配置文件有一个nameage财产分别与字符串和数值.如果有人试图编写任何其他属性,则拒绝写入.

以上是关于如何考虑保护(用户)数据的快速入门.我建议您查看Firebase安全文档(以及嵌入式视频)以获取更多信息.

  • 我们有 `{"rules":{".read":"auth != null"}}` 因为我们没有私有的每个用户数据,只有公共数据。但是我们已经收到了几个星期的电子邮件,说“任何登录的用户都可以读取您的整个数据库” (11认同)
  • 嘿,强尼.如果您的规则有意允许公开阅读所有数据,您不会存储用户数据,并且您愿意为阅读所有数据的人支付费用,那么您的规则就符合您的预期用途.在那种情况下,电子邮件确实过于嘈杂.目前无法禁用它们,因为我们希望确保开发人员了解其规则可能会使用户面临的潜在风险.您可能需要[提交功能请求](https://firebase.google.com/support/contact/bugs-features/)以禁用该电子邮件,但我希望添加该选项有点太早了. (2认同)
  • @Jonny 和这里的其他人,最后,“警报”下有一个切换开关,您可以使用它来选择退出这些电子邮件。 (2认同)

Him*_*der 11

您还可以通过访问电子邮件底部的链接将警报静音。

https://console.firebase.google.com/subscriptions/project/ <YOUR_PROJECT_NAME>

在此输入图像描述