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

时间:2017-03-06 08:23:04

标签: firebase firebase-realtime-database firebase-authentication

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

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

我不知道这是不是" duh"事实上,但我似乎无法在Firebase上发现任何关于" DON' T EXPOSE UID"的警告。我一直在浏览用户安全部分和Firebase的聊天示例演示,而常见的方法似乎创建了一个字段" share"或"授权"与授权用户的uid为真。我的问题主要是关于第一步。下面是我的数据结构片段。

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

我的想法是这样的。

  1. 请求字段的规则是用户可以读/写 uid_of_user_a,仅当此类用户可以为任何经过身份验证的用户写入 按下与uid_of_user_a匹配的targetUid。

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

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

  4. 然后,
  5. 用户A的私人数据可以被授权字段中列出的uid读取。

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

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

2 个答案:

答案 0 :(得分:4)

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

如果您的安全规则设置正确,则没有问题。如果一个用户知道另一个用户的UID,那么如果您的规则不允许,第一个用户就无法影响第二个用户的数据。您可能希望将有关用户的公共和私人信息分成separate locations,以便他们可以拥有单独的安全规则,如果这就是您所需要的。

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

答案 1 :(得分:0)

一个轻微的潜在风险是。有人可以修改您的应用程序和代码,我们基本上用来检查 user.auth = uid 可以将其更改为被盗的 uid = uid 现在黑客可以获取和更新数据。