gpt4 book ai didi

firebase - firestore 'read' 和 'list' 安全规则有什么区别?

转载 作者:行者123 更新时间:2023-12-04 14:37:35 24 4
gpt4 key购买 nike

使用 allow list; 有什么区别和 allow read;在 Firestore 访问规则中?更具体地说,如果我只允许 list,我的数据会得到什么额外的保护?与 read 相反津贴?

在我看来 read 和 list 提供了相同的安全性,他唯一的区别是 list使合法访问单个对象变得更加麻烦。毕竟,坏 Actor 可以简单地列出对象,然后阅读它们的全部内容。如果他知道对象的 ID,他可以简单地将其包含为搜索词。

// The scopes collection is restricted to only allow 'list' requests.
// The scopes collection contains a 'postPhoto' document

// The following request will fail with an insufficient permission error, as expected
await db
.collection(`/auth/${client}/scopes`)
.doc('postPhoto')
.get()
.then(doc => console.log(doc.id, doc.data()))
.catch(e => console.error(e))

// But this request will succeed, and it is in effect the same as the previous
await db
.collection(`/auth/${client}/scopes`)
.where(firebase.firestore.FieldPath.documentId(), '==', 'postPhoto')
.get()
.then(col => col.forEach(doc => console.log(doc.id, doc.data())))
.catch(e => console.error(e))

我原以为 list access 只允许您查看文件的存在,而不是它们的内容。但由于 list显然也允许您访问底层文档数据,为什么不直接使用 read ?

最佳答案

其实listread的一个特例,如 documentation 中所述:

In some situations, it's useful to break down read and write into more granular operations. For example, ... you may want to allow single document reads but deny large queries.

A read rule can be broken into get and list



更具体地说,让我们采取以下安全规则:
service cloud.firestore {
match /databases/{database}/documents {
match /col1/{docId=**} {
allow list: if request.auth.uid != null;
}
match /col2/{docId=**} {
allow get: if request.auth.uid != null;
}
}
}

以下查询将起作用:
firebase.firestore().collection("col1").get()

虽然这个不起作用:
firebase.firestore().collection("col2").get()

现在 ,让我们假设每个集合都有一个 ID 为“1”的文档。

以下查询将起作用:
firebase.firestore().collection("col2").doc("1").get()

虽然这个不起作用:
firebase.firestore().collection("col1").doc("1").get()

最后 , 如果你改变规则如下,使用 read ,以上所有查询都将起作用!
service cloud.firestore {
match /databases/{database}/documents {
match /col1/{docId=**} {
allow read: if request.auth.uid != null;
}
match /col2/{docId=**} {
allow read: if request.auth.uid != null;
}
}
}

关于firebase - firestore 'read' 和 'list' 安全规则有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57252795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com