gpt4 book ai didi

允许管理员用户读取/写入所有其他用户的 firebase 安全规则是否会造成安全漏洞?

转载 作者:行者123 更新时间:2023-12-02 00:07:18 26 4
gpt4 key购买 nike

我正在使用云 Firestore 数据库,我的根数据库上有“用户”集合,其中有所有用户文档(命名为 uid),里面有我收集的数据。 我想允许用户只读/写他们自己的集合,所以我开始了我的安全规则

service cloud.firestore {
match /databases/{database}/documents {
// Allow only authenticated content owners access
match /users/{userId}/{documents=**} {
allow read, write: if request.auth.uid == userId
}
}
}

然后我意识到用户没有创建他们自己的主文档的权限(它将它创建为“幽灵”文档)。我还想向其中添加数据,例如显示名称和电子邮件,所以我添加了

// Allow users to read/write their own main user object
match /users/{userId} {
allow read, write: if request.auth.uid == userId
}

一切正常,但现在我想允许管理员用户读取/写入所有用户的集合和文档。 firebase's documentations suggests向用户的文档添加一个键值,例如 (admin:true),因此像这样编辑我的安全规则应该可以解决问题:

match /users/{userId}/{documents=**} {
allow read, write: if request.auth.uid == userId
allow read, write: if get(/users/$(request.auth.uid)).data.admin == true; //-security breach?
}

但这不会造成安全漏洞,用户可以在技术上使用 (admin:true) 更新自己的文档并获得管理员权限吗?如果是这样,我猜我的方法应该是创建一个单独的 admins 集合并在那里添加我的管理员,然后按照以下行做一些事情

allow read, write: if get(/admins/$(request.auth.uid)) != null

?或者我可以使用更漂亮的东西吗?

最佳答案

这条规则确实会允许任何人将自己标记为管理员,这违背了你规则的全部目的(不要这样做):

allow read, write: if get(/users/$(request.auth.uid)).data.admin == true;

你更想做的是:

  • 要么 give the admin users a custom admin: true claim ,然后您可以检查您的规则:allow read, write: if auth.token.admin === true;
  • 在您的安全规则中为您的管理员保留一份明确的 UID 列表,然后在每条规则中进行检查。所以:允许读取、写入:if isAdmin(); 然后是 function isAdmin(request) { return request.auth.uid == "KqEizsqUQ6XMkUgLUpNxFnzLm4F3"}
  • 在 Firestore 的另一个(通常不可写的)集合中保存一个管理员 UID 列表,并对照它进行检查。这几乎就是您所描述的内容,如果您想快速轻松地添加/删除管理员,这是最常用的方法。

关于允许管理员用户读取/写入所有其他用户的 firebase 安全规则是否会造成安全漏洞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60179115/

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