android firebase如何使用validate限制写权限,使其仅通过规则中定义的特定值

5lhxktic  于 2023-01-15  发布在  Android
关注(0)|答案(1)|浏览(114)

我在数据库中有一个文件夹user/user 1我想在其中写入名称和电话我正在使用in rules playground测试此操作

location = /user/user1

数据(JSON)

{
  "name": "value",
  "phone": "value"
}

规则

"user":{      
  "$uid":{  
    ".read": true,
    ".write": true,
    ".validate" : "newData.child('name').exists() && newData.child('phone').exists() "         
  }  
}

这和我预期的一样。如果我只输入名字,它会被拒绝。所以这很好,现在我想如果有第三个值也会被拒绝:

{
  "name": "value",
  "phone": "value",
  "data": "value"
}

这里是一个安全问题。如果任何人添加一个随机值到这个位置,然后我会得到一个大法案从firebase。我害怕这个,或者我只是得到偏执?

6xfqseft

6xfqseft1#

这听起来像是您想要禁止,您可以通过命名允许的属性,然后使用所谓的通配符捕获所有变量来拒绝任何其他属性:

"user":{      
  "$uid":{  
    ".read": true,
    ".write": true,
    ".validate": "newData.hasChildren(['name', 'phone'])", // 👈 you must always have these
    "name": {
      ".validate": true // 👈 you probably should validate the format here
    },
    "phone": {
      ".validate": true // 👈 and you should validate the format here too
    },
    "$others": {
      ".validate": false // 👈 other values are rejected
    }
  }  
}

另请参阅我对Firebase realtime database rules to edit only existing fields的回答,其中涵盖了类似的注意事项

相关问题