2017-03-06 44 views
2

簡短的問題:如果我在客戶端公開其他用戶的UID,有什麼風險/問題?Firebase數據庫 - 與在客戶端暴露uid相關的風險?

我的情況: 我正在構建一個測試android應用程序,需要能夠讓1)用戶foo請求授權以便2)訪問用戶A的私人數據。

我不知道這是不是一個「嗯」的事實,但我似乎無法在Firebase上發現任何關於「不暴露UID」的警告。我一直在瀏覽用戶安全部分和Firebase的聊天示例演示,並且通常的做法似乎是將授權用戶的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用戶/寫,和可寫的任何認證的用戶,只要這種用戶 推在targetUid匹配uid_of_user_a。

  2. 在客戶端,用戶A有一個onChildEventListener,並附有對該字段的引用。當客戶端收到onChildAdded回調時,會顯示一個對話框並要求確認。

  3. 如果得到確認,則客戶端側檢索來自請求消息請求者的UID,並將其推到「授權」的字段然後

  4. 用戶A的私有數據可以通過在授權字段中列出的UID可讀。

問題:需要向客戶端公開其他用戶的uid。這種方法類似於在電話上呼叫某人,呼叫者必須首先知道接收方的電話號碼。所以,在沒有真正發出電話號碼和電子郵件的情況下,某人必須以某種方式瞭解UID,以便甚至能夠傳遞信息並要求獲得可分享的數據,對嗎?......但是,我的直覺手段似乎很簡單。

我是新來的firebase數據庫和一般的用戶認證,所以請原諒我的法語:)在此先感謝所有的專家。

回答

2

UID只是一個字符串。沒有任何信息。祕密信息是用戶的密碼(您永遠無法看到)以及他們的臨時身份驗證令牌,該令牌會在一小時後過期。 SDK將自動刷新該令牌。

如果您的安全規則設置正確,則沒有問題。如果一個用戶知道另一個用戶的UID,那麼如果您的規則不允許,則第一個用戶無法影響第二個用戶的數據。您可能希望將有關用戶的公共和私人信息分隔爲separate locations,以便他們可以擁有單獨的安全規則,如果這是您需要的。

如果由於某種原因,您仍然認爲UID需要保密,您可以生成一個不同的UUID或用來標識用戶並使用它,但我不知道將提供多少額外的安全性。

+0

謝謝您的回覆,我現在感到很放心。作爲初學者,我對uid有所保留,因爲Firebase數據庫標準練習使用「$ uid === auth」。uid「作爲允許用戶訪問他們的私人數據的規則,我的直覺(不知道auth的實際工作原理)是用戶能夠使用uid進行欺騙,使用UID進行用戶間的授權是一種標準做法嗎? –

+0

該規則確保只有具有該UID的完全認證的用戶才能訪問那裏的數據,它不能被欺騙 - 它只適用於使用用戶登錄的Firebase身份驗證的應用程序。它不僅僅是一些Web API的參數。 –