简短问题:如果我在客户端公开其他用户的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 回答
UID只是一个字符串 . 其中没有任何信息 . 这条秘密信息是用户的密码(你永远看不到)和他们的临时身份验证令牌,它在一小时后过期 . SDK将自动刷新该令牌 .
如果您的安全规则已正确设置,则没有问题 . 如果一个用户知道另一个用户's UID, there' s,如果您的规则不允许,第一个用户可以做任何事情来影响第二个用户的数据 . 您可能希望将有关用户的公共和私人信息分成separate locations,以便他们可以拥有单独的安全规则(如果这是您需要的) .
如果由于某种原因您仍然认为UID需要保密,您可以生成不同的UUID或其他东西来识别用户并使用它,但我不知道将提供什么额外的安全性 .