繁体   English   中英

Firebase 实时数据库规则的安全性

[英]Security of firebase realtime database rules

在我的应用程序中,我使用自定义声明为用户分配角色。 管理员可以使用时髦的切换按钮(使用云功能)更改人员的角色,因此(她)需要查看所有用户的列表......但另一方面,当用户注册时,他们需要添加到用户数据库集合中。 这个集合显然不用于授权任何东西,但它只是为了管理员可以更改该集合中用户的角色。 所以管理员需要能够读取表格,每个人都需要能够在集合中写入......所以我在这方面的规则如下所示:

    {
      "rules": {
        "users": {
          ".read": "auth.token.isAdmin === true",
          ".write": true
        },

我已经检查了 redux 商店,它似乎有效。 我调用 action creator 获取组件中的用户并在我是普通用户时访问它,我看到 redux 存储中的用户节点仍然是空的......当我以管理员身份登录并转到组件时,我看到用户节点被填满了......所以它似乎工作,但我想确保这是一种安全的工作方式,因为让每个人都写到桌子上感觉不对:-)但是就像我说的,桌子本身不用于授权任何东西,所以也许没关系.....

感谢您对此的任何意见:-)

亲切的问候,大卫

您拥有的是一个相当常见的模式:每个人都可以编写请求,但只有授权用户才能读取请求。

这种模式不存在泄露信息的固有安全风险,只要您确保只有授权用户拥有isAdmin == true


但是现在任何用户都可以向/users节点写入任何他们想要的内容。 这也意味着任何用户都可以通过一个简单的: firebase.database().ref("users").remove()调用删除所有现有数据。 这可能是您想要防范的。

如何做到这一点取决于用户写入/users方式和内容。 例如,如果他们在他们的下面编写自己的用户配置文件,而您使用他们的 UID 作为密钥,则可以确保用户只能使用以下内容编写自己的配置文件:

{
  "rules": {
    "users": {
      ".read": "auth.token.isAdmin === true",
      "$uid": {
        ".write": "auth.uid === $uid"
      }
    }
  }
}

如前所述,这取决于您编写的实际数据,因此您需要查看有关保护数据访问的 Firebase 文档并为您的用例实施该文档。


我会考虑一件事是限制哪些用户可以写入到数据库中的这个节点。 例如,您可以使用.validate规则来限制他们可以写入的值,甚至可以使用.write规则来确保用户只写入他们自己的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM