【发布时间】:2021-12-01 21:37:07
【问题描述】:
假设我有一个集合 todos,其中包含代表用户待办事项列表的文档。
为了保护这些文档,您通常可以找到以下安全规则的 sn-ps:
...
match /todos/{todo} {
allow create: if request.auth.uid != null && request.resource.data.ownedBy == request.auth.uid;
allow read, update, delete: if resource.data.ownedBy == request.auth.uid;
}
...
只要ownedBy 字段与执行请求的人的uid 相同,这些规则就允许对文档进行CRUD 操作。
我担心的是ownedBy 字段也是该文档的一部分,这意味着用户可以轻松地将ownedBy 修改为不同的userId。我怀疑有人会出于任何原因这样做,但从开发人员的角度来看,这是否意味着让您所依赖的字段成为可编辑文档的一部分是危险的?
另一种看待它的方式是,此行为与将权限/授权存储在同一文档中相同。将{ canEdit: true, canDelete: false} 存储在同一个文档中是错误的,那么为什么可以将ownedBy 字段存储在该文档中?
有什么好的做法可以解决这个问题?
【问题讨论】:
标签: firebase google-cloud-firestore firebase-security