【问题标题】:Firebase rules with wildcards to read data if wildcard is known如果通配符已知,则使用通配符读取数据的 Firebase 规则
【发布时间】:2018-04-08 22:13:56
【问题描述】:

我有一个注册系统,我只希望用户注册,如果他们有一个有效的密钥,我会提供给想要注册的用户。如果密钥在数据库中,则继续注册。因此,我生成了随机不重复的 8 个字符,并将它们存储在实时数据库中,结构如下:

Secrets:
 "x5f1n9v0":
     "Status" : 1
 "C8vT2xxY":
     "Status" : 1
And so on

..

{
  "rules": {
    "secrets":{
      "$secret": {
        ".read": true,
        ".write": false
      }      
    }
  }
}

关于上述规则的第一个问题:- 在这种情况下,没有人可以添加新的密钥? 此外,只有当有人从我的列表中获得有效密钥时,读取才会有效?没有人可以阅读整个列表吗?这有什么错误吗?

现在假设有另一组规则,如果用户知道有效 id,我想写入每个键的子级。

如果我将写入规则更改为 true,这会起作用并且没有错误可以破解它吗?

  "rules": {
    "secrets":{
      "$secret": {
        ".read": true,
        ".write": true
      }      
    }
  }
}

谢谢

【问题讨论】:

  • 这里的问题真的太多了。我将尝试在下面回答,但以后请限制在一个问题上。 (顺便说一句,不是反对者,尽管我可以想象这可能是原因)
  • 其实我不知道为什么我投了反对票。也许对于最后一个愚蠢的问题,但我看到我的帖子安排得很好,而且我也从你那里得到了明确的答案。我实际上不能再发帖并被禁止。无论如何,非常感谢您的帮助。

标签: firebase firebase-realtime-database wildcard firebase-security


【解决方案1】:

在这种情况下,没有人可以添加新的密钥?

使用这些第一条规则,只有具有管理权限的人才能添加密钥。

只有当某人拥有我列表中的有效密钥时,读取才会有效?没有人可以阅读整个列表?

确实没有办法用你的第一组规则阅读整个列表。只有知道密钥的人才能读取密钥。

用你的第二套规则:

"secrets":{
  "$secret": {
    ".read": true,
    ".write": true
  }
}

现在任何人都可以写任何秘密。那可能不是你想要的。如果您只想允许他们更改现有密钥下已经存在的数据,您需要检查是否已经存在任何数据:

"secrets":{
  "$secret": {
    ".read": true,
    ".write": "data.exists()"
  }
}

如果您希望他们不能更改但不能删除现有数据,那就是data.exists() && newData.exists()。如果您对用户可以编写的数据格式有其他要求,则需要将这些要求添加到相应的 .validate 规则中。

您的最后一套规则既无效又毫无意义。这是无效的,因为 $secrets 没有定义。但即使它被定义为$secrets === $secrets,也将永远是true

【讨论】:

  • 非常感谢您快速而清晰的回答。现在对我来说很清楚并回答了我所有的问题。
  • 您好,添加 data.exists() 的规则拒绝创建新密钥,但现在任何人仍然可以在密钥内创建子列表(如果已知)。 firebasedb.ref('secrets/$key/email/values/another/sub/list').set("spam"); N.B:我更改了结构以在键下包含电子邮件和 isValid。我在这里尝试了您的解决方案,但对我来说失败了:stackoverflow.com/a/36782496/9574544
  • 如果您想强制执行某种数据结构,您需要为此添加.validate 规则。如果您在进行这些操作时遇到问题,请使用minimal JSON + rules that reproduce where you are stuck 提出一个新问题。
  • 谢谢。当我没有被阻止时,我会尝试再次询问。
猜你喜欢
  • 1970-01-01
  • 2021-01-24
  • 2017-04-30
  • 2021-12-12
  • 2018-08-03
  • 2020-05-31
  • 2016-10-12
  • 1970-01-01
  • 2019-01-27
相关资源
最近更新 更多