【问题标题】:How to allow only specified child names for write operation with Firebase Security Rules如何使用 Firebase 安全规则仅允许指定的子名称进行写入操作
【发布时间】:2021-03-13 19:18:34
【问题描述】:

我有一个用户节点,其中有用户数据,其中仅包含 uid、姓名和年龄,如下所示:

{
  "user_1": {
    "uid": "user_1",
    "name": "Alex",
    "age": 35,
  }
}

我认为我可以使用hasChildren 方法来防止任何人添加孩子,除了我指定的孩子:

"users": {
  "$uid": {
    ".read": "auth != null",
    ".write": "auth != null",
    ".validate": "newData.hasChildren(['uid', 'name', 'age'])",
  },
}

但是,它不起作用,因为用户可以添加他们想要的任何内容,只要他们提供 uid、姓名和年龄。我总是在客户端检查数据,但是恶意的人可以找出 api 并添加不必要的东西。有没有办法解决这个问题?

【问题讨论】:

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


    【解决方案1】:

    文档中没有关于此问题的任何内容,但我在谷歌上搜索并找到了一些东西。在您的节点中包含一个额外的通配符并使 .validate 始终为 false 当新数据具有您指定的键以外的子键时拒绝该操作。

    "users": {
      "$uid": {
        ".read": "auth != null",
        ".write": "auth != null",
        ".validate": "newData.hasChildren(['uid', 'name', 'age'])",
        // Make sure you specify all keys you want to allow
        // so the wildcard won't match them
        "uid": { ".validate": "newData.isString()" },
        "name": { ".validate": "newData.isString()" },
        "age": { ".validate": "newData.isNumber()" },
        // Add this wildcard below and make it false always
        "$other": { ".validate": false }
      }
    }
    

    不要忘记您应该在节点中包含所有键。

    查看this 了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-02
      • 2015-11-22
      • 2014-02-08
      • 2018-12-26
      • 2016-09-28
      • 1970-01-01
      • 2015-03-25
      相关资源
      最近更新 更多