作者:小染雪_647 | 来源:互联网 | 2023-02-09 19:46
简短的问题:如果我在客户端公开其他用户的UID,会有什么风险/问题?
我的情况:我正在构建一个测试android应用程序,该应用程序必须能够允许1)用户foo请求授权,以便2)访问用户A的私有数据。
我不知道这是否是“ du”的事实,但是我似乎在Firebase上找不到关于“请勿暴露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的用户,该字段是可读写的;对于任何经过身份验证的用户,只有当该用户推送与uid_of_user_a匹配的targetUid时,该字段才可写入。
在客户端,用户A附加了一个onChildEventListener,并带有对此字段的引用。当客户端收到onChildAdded回调时,将出现一个对话框,要求您进行确认。
如果确认,则客户端从请求消息中检索请求者的uid,并将其推送到“授权”字段
然后,用户A的私有数据可以被授权字段中列出的uid读取。
问题:需要向客户端公开另一个用户的uid。此方法类似于打电话给某人一样,呼叫者必须先知道接收端的电话号码。因此,在没有实际给出电话号码和电子邮件的情况下,某人必须以某种方式知道UID,以便甚至传递消息并要求获取可共享的数据,对吗?....但是,我的直观方法似乎很琐。
我一般是Firebase数据库和用户身份验证的新手,所以请原谅我的法语:)在此先感谢所有专家。
1> Doug Stevens..:
UID只是一个字符串。里面没有信息。秘密信息是用户的密码(您永远不会看到)和他们的临时身份验证令牌,该令牌在一个小时后失效。SDK将自动刷新该令牌。
如果正确设置了安全规则,则没有问题。如果一个用户知道另一个用户的UID,则在您的规则不允许的情况下,第一个用户无法做任何事情来影响第二个用户的数据。您可能需要将有关用户的公共和私人信息划分到不同的位置,以便他们可以有单独的安全规则(如果需要)。
如果出于某种原因您仍然认为需要对UID进行保密,则可以生成一个不同的UUID或其他东西来标识用户并使用它,但是我不知道它将提供什么额外的安全性。