【发布时间】: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