【问题标题】:Firestore security rule to limit reads to use collectionGroup(..)?Firestore 安全规则限制读取以使用 collectionGroup(..)?
【发布时间】:2021-01-19 15:12:54
【问题描述】:

几个问题涉及知道 Firestore uid 是否允许黑客编辑该人的数据,例如 this questionthis question。我的问题是关于过滤用户何时可以读取他人数据的安全规则。

具体来说,我有一个允许人们匿名发布数据的社交媒体应用。我的数据模型是/users/{user}/posts/{post}。我使用 db.collectionGroup("posts") 来构建帖子的时间线,(有些是匿名的,有些是用户名)。

非匿名帖子具有有效的 uid,因此黑客要找出某人的 uid 并不难,我并不担心。我担心的是黑客是否可以查询usersRef.document(uid).posts.getDocuments(); 以获取该用户的所有帖子,包括匿名帖子?

因为我的应用程序从用户“帖子”集合构建时间线,所以我无法编写他们不能阅读其他用户帖子的规则。我可以写一条规则,他们只能阅读带有 collectionGroup 的帖子吗?

【问题讨论】:

    标签: google-cloud-firestore firebase-security


    【解决方案1】:

    按照现在的结构方式,这是不可能的。这是您编写规则以允许集合组查询的方式,如documentation中所述

        match /{path=**}/posts/{post} {
          allow read: if ...condition...;
        }
    

    规则中的path 通配符明确允许all 读取名为“posts”的all 集合。该规则不会将读取限制为仅收集组查询 - 任何“帖子”上的任何正常收集查询都将被允许。

    请记住,与普通集合查询相比,集合组查询不会对调用者隐藏任何数据。查询结果仍将包含对每个文档的完整路径的引用,其中包括路径中的文档 uid。

    【讨论】:

    • 谢谢@Doug。我突然想到,如果我可以将 usersRef.document(uid) 锁定为只有 uid 的所有者可以访问,那将满足我的需要。或者这也会阻止用户用户在帖子上运行 groupCollection?
    • 没有规则可以“锁定”对任何内容的访问。安全规则只能通过授予条件访问来发挥作用。一旦授予访问权限时满足条件,就不能被其他规则撤销。阻止访问某些内容的唯一方法是根本不授予访问权限。
    猜你喜欢
    • 2020-08-21
    • 1970-01-01
    • 2021-01-05
    • 2021-12-11
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    相关资源
    最近更新 更多