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

Firebase电子邮件说我的实时数据库有不安全的规则,firebase,firebase-realtime-database,firebase-authentication,firebase-security,Firebase,Firebase Realtime Database,Firebase Authentication,Firebase Security,我最近收到一封来自firebase的电子邮件,告诉我我的实时数据库有不安全的规则。以下是我制定的规则: { "rules": { ".read": "auth != null", ".write": "auth != null" } } 这不是一个安全的规则吗 电子邮件/密码是我启用的唯一登录方法。firebaser此处 我很抱歉,如果电子邮件没有非常明确地说明这些规则的不安全之处。保护您的用户数据对于您提供的任何应用程序来说都是至关重要的一步,因此我将在下面详细解释这一

我最近收到一封来自firebase的电子邮件,告诉我我的实时数据库有不安全的规则。以下是我制定的规则:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
 }
}
这不是一个安全的规则吗

电子邮件/密码是我启用的唯一登录方法。

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"
      }
    }
  }
}
使用这些规则,每个人(即使是未经身份验证的用户)都可以读取所有配置文件。但每个配置文件只能由其配置文件所在的用户修改。有关这方面的更多信息,请参阅

除了确保对数据的所有访问都经过授权外,您还需要确保存储的所有数据都符合应用程序的任何规则。例如,假设您想为一个用户存储两个属性:他们的姓名和年龄(仅为了示例,实际上您可能会存储他们的出生日期)。因此,您可以将其存储为:

"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
        }
      }
    }
  }
}
这些规则确保每个用户配置文件都有一个分别带有字符串和数值的
名称
年龄
属性。如果有人试图写入任何其他属性,则写入操作将被拒绝


以上是如何考虑保护(用户)数据的快速入门。我建议您查看(以及嵌入式视频)了解更多信息。

这可能是因为您允许用户登录时访问所有数据。您应该只允许记录的用户和公共数据,而不允许所有数据。您还必须指定树级规则。这些规则似乎很好,您检查过电子邮件是否来自该项目吗?@MuruGan I只有一棵树,所有用户只要经过身份验证,都可以读写此树。这就是为什么我的规则是这样写的。最近firebase团队发现,很多项目都有安全问题,这就是为什么他们向您发送邮件的原因。请尝试联系firebase支持团队以获取更多详细信息我们有
{“规则”:{.read:“auth!=null”}
,因为我们没有每个用户的私有数据,只有公共数据。但是我们已经收到好几个星期的电子邮件说“任何登录的用户都可以读取你的整个数据库”嘿,乔尼。如果您的规则有意允许公开读取所有数据,您不存储用户数据,并且您愿意为读取所有数据的人员支付费用,那么您的规则符合您的预期用途。在这种情况下,电子邮件确实太吵了。目前还没有办法禁用它们,因为我们希望确保开发人员意识到他们的规则会让他们的用户面临潜在的风险。您可能希望允许禁用电子邮件,尽管我认为添加该选项为时过早。谢谢。读取规则适用于数据库中的所有数据。我们有三个顶级“文件夹”-删除全局读取规则并为三个文件夹中的每一个指定相同的读取规则是否有帮助?我想,即使我试过了,我也不知道电子邮件是否会在几周后停止,因为我认为没有办法测试这种临时性(?)@Jonny和这里的其他人,最后在警报下有一个切换,你可以使用它选择退出这些电子邮件。@Frankvanpoffelen对不起,我的错。原来他们只是在谈论“实时”数据库。我打赌有更多像我这样的人在读这本书。但是,我的错。