【问题标题】:Firebase Database - Risks associated with exposing uid on the client side?Firebase 数据库 - 与在客户端公开 uid 相关的风险?
【发布时间】:2017-07-26 00:48:15
【问题描述】:

小问题:如果我在客户端公开其他用户的 UID,会有哪些风险/问题?

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

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

 {
      "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. 然后用户 A 的私有数据可以通过授权字段中列出的 uid 读取。

问题:需要向客户端公开另一个用户的 uid。这种方法相当于打电话给某人,呼叫者必须先知道接收端的电话号码。所以,在没有实际提供电话号码和电子邮件的情况下,有人必须以某种方式知道 UID 才能传达消息并要求获取可共享的数据,对吧?....但是,我的直观方法似乎不太可靠。

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回复,我现在放心了很多。作为一个初学者,我对 uid 有所保留,因为 Firebase 数据库标准实践使用“$uid === auth.uid”作为允许用户访问其私人数据的规则。我的直觉(不知道身份验证实际上是如何工作的)是用户能够使用 uid 进行欺骗。使用 UID 在用户之间进行授权是一种标准做法吗?
    • 该规则确保只有具有该 UID 的 完全验证 用户可以访问那里的数据。它不能被欺骗 - 它仅适用于使用 Firebase 身份验证且用户已登录的应用。它不仅仅是某些 Web API 的参数。
    猜你喜欢
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多