简短问题:如果我公开其他用户,有什么风险/问题?客户端的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
}
}
}
}
}
我的想法是这样的。
请求字段的规则是用户可以读/写 uid_of_user_a,仅当此类用户可以为任何经过身份验证的用户写入 按下与uid_of_user_a匹配的targetUid。
在客户端,用户A的onChildEventListener附加了对该字段的引用。当客户端收到onChildAdded回调时,会出现一个对话框并要求确认。
如果确认,客户端将从请求消息中检索请求者的uid,并将其推送到"授权的"字段
用户A的私人数据可以被授权字段中列出的uid读取。
问题:需要向客户端公开其他用户的uid。这种方法类似于在电话上呼叫某人,呼叫者必须首先知道接收端的电话号码。所以,在没有实际发出电话号码和电子邮件的情况下,有人必须以某种方式知道UID以便甚至得到消息并要求获得可共享的数据,对吧?......但是,我的直觉方法似乎是不确定的。
我一般都是firebase数据库和用户身份验证的新手,所以请原谅我的法语:)先谢谢所有的大师。
答案 0 :(得分:4)
UID只是一个字符串。其中没有任何信息。这条秘密信息是用户的密码(你永远看不到)和他们的临时身份验证令牌,它在一小时后过期。 SDK将自动刷新该令牌。
如果您的安全规则设置正确,则没有问题。如果一个用户知道另一个用户的UID,那么如果您的规则不允许,第一个用户就无法影响第二个用户的数据。您可能希望将有关用户的公共和私人信息分成separate locations,以便他们可以拥有单独的安全规则,如果这就是您所需要的。
如果由于某种原因您仍然认为UID需要保密,您可以生成不同的UUID或其他东西以识别用户并使用它,但我不知道将提供什么额外的安全性。 / p>
答案 1 :(得分:0)
一个轻微的潜在风险是。有人可以修改您的应用程序和代码,我们基本上用来检查 user.auth = uid 可以将其更改为被盗的 uid = uid 现在黑客可以获取和更新数据。