gpt4 book ai didi

json - Firebase 数据库 - 反向索引中的安全考虑

转载 作者:行者123 更新时间:2023-12-03 23:31:09 26 4
gpt4 key购买 nike

在 Firebase 指南中,建议之一是维护反向索引以跟踪用户操作。这是我所指的片段:

// An index to track Ada's memberships
{
"users": {
"alovelace": {
"name": "Ada Lovelace",
// Index Ada's groups in her profile
"groups": {
// the value here doesn't matter, just that the key exists
"techpioneers": true,
"womentechmakers": true
}
},
...
},
"groups": {
"techpioneers": {
"name": "Historical Tech Pioneers",
"members": {
"alovelace": true,
"ghopper": true,
"eclarke": true
}
},
...
}
}

每个用户都在反向索引中跟踪他/她的组 - 这意味着在这种情况下,键保存实际值,而值无关紧要。

更新

我不确定如何从技术上更新索引,但经过一番研究后我得到了它: setValue可以接受所有变量,而不仅仅是键值对。这意味着更新索引非常简单:只需获取对 groups/$group_id/members/$member_id 的引用即可。并将其值设置为 true .

现在我的问题不同了:

可以说所有组都是私有(private)的。这意味着用户只能通过邀请加入群组 - 当前群组成员必须将另一个用户添加到成员列表中。所以如果我是 ghopper 我想添加 alovelace 作为成员(member),我需要更新她的索引,该索引是她的用户对象的一部分——这意味着我必须以某种方式知道她的用户 ID 并拥有对她的写入权限 groups领域 - 这似乎是一个安全风险。

关于如何在尽可能限制访问的同时管理此问题的任何想法?也许是另一个将用户已知标识符映射的数据库对象,例如电子邮件到组列表?

最佳答案

解决方案 1 - 客户端

一种解决方案是拥有一个单独的用户邀请对象,以便 ghopper 可以加 alovelace 到私有(private)群组并显示 alovelace的邀请而不是自动将她添加到组中。 alovelace 然后需要批准添加并更新她的组成员身份。这样,只有用户保留对其用户记录的访问权限。这与在 facebook 上添加 friend 或在linkedin 上请求连接非常相似。

为了说明,架构可能看起来像这样

// An index to track Ada's memberships
{
"users": {
"alovelace": {
"name": "Ada Lovelace",
// Index Ada's groups in her profile
"groups": {
// the value here doesn't matter, just that the key exists
// Only Ada can write here
"techpioneers": true,
"womentechmakers": true
}
},
...
},
"invitations": {
"alovelace": {
"name": "Ada Lovelace",
"groups": {
// the value here doesn't matter, just that the key exists
// Anyone can write here
"ghoppersfanclub": true, // Ada might accept this and move it to groups
"explicitcontentgroup": true, // Ada might reject this and delete this entry
}
},
...
},
"groups": {
"techpioneers": {
"name": "Historical Tech Pioneers",
"members": {
"alovelace": true,
"ghopper": true,
"eclarke": true
}
},
...
}
}

解决方案 2 - 服务器端

尽管 Firebase 旨在支持在没有服务器代码的情况下构建应用程序,但在某些情况下您应该混合使用服务器。在我看来,安全性和可信操作的执行,例如一个用户更改另一个用户的记录(如果我们不使用像上面的“邀请”这样的单独对象)应该由您的可信服务器使用管理 API 处理。当 ghopper 添加 alovelace 作为成员,一个可能的事件顺序是:
  • 检查 ghopper 属于该组,可以添加另一个用户(客户端)
  • 向您的服务器发送一个请求,其有效负载包括组名/ID、发送请求的用户和被添加用户的电子邮件
  • 然后服务器使用提供的电子邮件查找 alovelace 的用户 id 并更新用户记录。
    admin.auth().getUserByEmail(alovelace_email)
    .then(function(userRecord) {
    // Add group to alovelace's groups.
    // Trigger a client-side notification using child_changed
    // Allow alovelace to approve or decline addition to group
    })
    .catch(function(error) {
    console.log("Error fetching user data:", error);
    });

  • 上面的示例使用电子邮件作为公共(public)/可共享的唯一标识符,但也有一个类似的 getUserByPhoneNumber(phoneNumber) 方法。

    关于json - Firebase 数据库 - 反向索引中的安全考虑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37639443/

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