【问题标题】:Filtering and Permissions in FirebaseFirebase 中的过滤和权限
【发布时间】:2016-10-10 05:08:16
【问题描述】:

我向this question 询问了我的 Firebase 实施情况。从本质上讲,我是在尝试构建我的 Firebase 数据库,以便我可以拥有一组对象,让一些用户访问这些对象的一个​​子集。

在我的示例中,我有任务。多个用户将使用此数据库,根据 Firebase 的建议,所有用户的所有任务都是 flattened 作为一个父节点的子节点。每个用户都可以访问他们自己的任务,由 task 对象中的 creatorId 指示。也许将来可以扩展权限,以便可以与其他用户共享任务。但目前,只有所有权和创建者可以读写自己的tasks

使用queries 实现这一点很简单。我不是安全专家,但在我看来,以某种方式将这些规则与客户端实现中的查询分开执行是一项重要的安全考虑。即使我的客户以这种方式限制访问,并且 all 访问需要使用我们的自定义令牌提供程序进行身份验证,但似乎有人(另一个经过身份验证的用户)可以弄清楚我们如何检索我们的数据并访问其他用户的任务。

我知道Rules Are Not Filters(也请参阅this),但希望以这种方式保护数据访问似乎是合理的。

我的问题:

  • 这根本就不是一个有意义的安全问题吗?
  • 如果是,是否有类似于 Firebase 的方式来执行我所描述的操作?在 Firebase 的 security example 中,就像用户无法访问 所有 房间或消息一样。这似乎是一个非常合理的软件设计决策(私人房间、私人房间中的消息等)
  • 我只是在这里完全遗漏了什么,或者不了解情况,还是以非常幼稚的方式构建它?

编辑:

我想我第一次阅读 I Structuring Data 时,我错过了解决这一点的“使用索引定义复杂关系”。

【问题讨论】:

  • 这确实可以通过为每个用户添加一个索引以及他们可以访问的项目的键来解决。如果这是您要查找的内容,您可以添加一个自我回答吗?

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


【解决方案1】:

我想我第一次阅读 I Structuring Data 时,我错过了解决这一点的“使用索引定义复杂关系”。

我想做的是,作为 Frank van Puffelen clarifies,在我的各种 user 对象上,为每个用户可以访问的项目添加一个键列表。

当我更新或上传项目时,这不会有太大变化(除了复制存储这些关系)。

但是,当获取和侦听.ChildChanged 事件时,我认为不是为所有一种类型的对象设置一个observeEventType 处理程序,而是为用户有权访问的每个单独对象设置一个处理程序。

【讨论】:

    猜你喜欢
    • 2018-09-09
    • 2019-01-31
    • 1970-01-01
    • 2016-11-27
    • 2017-07-01
    • 1970-01-01
    • 2015-03-06
    • 2014-03-24
    • 2020-12-22
    相关资源
    最近更新 更多