Firebase说我的规则不安全,为什么?

时间:2018-07-10 23:28:41

标签: swift firebase firebase-realtime-database firebase-security-rules

我收到了Firebase的电子邮件,通知我我的安全规则不安全,理由是:任何用户都可以读取/写入您的数据库。

怎么可能,我在下面指定了.read.write规则。 我缺少什么?任何帮助将不胜感激。

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null",
      "venues-location": {
        ".indexOn": "g"
    },
      "users-compliments": {
        "$uid":{
          "$uid":{
            ".indexOn": ".value"
          }
        }
    },
      "users-invites": {
        "$uid":{
          "$uid":{
            ".indexOn": ".value"
          }
        }
    },
    "users-location": {
        ".indexOn": "g"
    }
  }
}

2 个答案:

答案 0 :(得分:4)

".read": "auth != null",

".write": "auth != null",

这些规则是默认规则。根据Firebase documentation的说法,它们允许对您的应用程序的经过身份验证的用户进行完全的读写访问。如果您希望向所有应用程序用户开放数据,但又不希望向所有人开放数据,那么它们很有用

在启动应用程序之前,必须正确配置这些规则,以确保用户只能访问其应有的数据。

{
  "rules": {
    "foo": {
      ".read": true,
      ".write": false
    }
  }
}

这是一个规则示例,它向/ users //授予已认证用户的写访问权限,其中是通过Firebase身份验证获得的用户ID。

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}

答案 1 :(得分:2)

"auth != null"是不够的。这意味着任何经过身份验证的人都可以读/写另一个用户的数据。您可能想要添加以下内容: ".write": "auth.uid == $uid"节点下的$uid。 只允许经过身份验证的用户访问自己的数据,而不能访问其他用户的数据。