首页 文章

Firebase数据库 - 与在客户端公开uid相关的风险?

提问于
浏览
3

简短问题:如果我在客户端公开其他用户的UID,有什么风险/问题?

我的情况:我正在构建一个测试Android应用程序,需要能够让1)用户foo请求授权,以便2)访问用户A的私人数据 .

我不知道这是否是一个“duh”事实,但我似乎无法在Firebase上找到关于“DO NOT EXPOSE UID”的任何警告 . 我一直在浏览用户安全部分和Firebase的聊天示例演示,并且常见的方法似乎创建了一个字段“共享”或“授权”,授权用户的uid为true . 我的问题主要是关于第一步 . 下面是我的数据结构的片段 .

{
      "users" : {
        "uid_of_user_a" : {
          "requests" : {
            "-KeXTQeFJ2gAiaazteO1" : {
              "requestUid" : "uid_of_user_foo",
              "targetUid" : "uid_of_user_a",
              "timeStamp" : 123456
            }
          }
        }
      }
    }

我的想法是这样的 .

  • 请求字段的规则是,对于具有uid_of_user_a的用户,它是可读/写的,并且只有当此类用户在targetUid中推送与uid_of_user_a匹配时,才可为任何经过身份验证的用户写入 .

  • 在客户端,用户A的onChildEventListener附加了对该字段的引用 . 当客户端收到onChildAdded回调时,会出现一个对话框并要求确认 .

  • 如果确认,客户端将从请求消息中检索请求者的uid,并将其推送到“授权”字段

  • 用户A的私有数据可以被授权字段中列出的uid读取 .

问题:需要将另一个用户的uid暴露给客户端 . 这种方法类似于在电话上呼叫某人,呼叫者必须首先知道接收端的电话号码 . 所以,在没有实际发出电话号码和电子邮件的情况下,有人必须以某种方式知道UID以便甚至得到消息并要求获得可共享的数据,对吧?....但是,我的直觉方法似乎不确定 .

我是firebase数据库和用户身份验证的新手,所以请原谅我的法语:)先谢谢所有的大师 .

1 回答

  • 3

    UID只是一个字符串 . 其中没有任何信息 . 这条秘密信息是用户的密码(你永远看不到)和他们的临时身份验证令牌,它在一小时后过期 . SDK将自动刷新该令牌 .

    如果您的安全规则已正确设置,则没有问题 . 如果一个用户知道另一个用户's UID, there' s,如果您的规则不允许,第一个用户可以做任何事情来影响第二个用户的数据 . 您可能希望将有关用户的公共和私人信息分成separate locations,以便他们可以拥有单独的安全规则(如果这是您需要的) .

    如果由于某种原因您仍然认为UID需要保密,您可以生成不同的UUID或其他东西来识别用户并使用它,但我不知道将提供什么额外的安全性 .

相关问题