簡體   English   中英

用Firebase的push()/ childByAutoID生成的名稱的唯一性保證是什么?

[英]What are the uniqueness guarantees of names generated with Firebase's push()/childByAutoID?

我想使用Firebase制作位置難以猜測的公開可讀數據。 因此,要讓某人訪問存儲在“ element [element [element ID = X]”中的數據”,我想只向他們發送“ X”,而不是向他們發送“ X”以及旨在賦予他們訪問權限的安全令牌元素。 Firebase的push()childByAutoID看起來很自然:我可以授予公眾對所有單個元素的讀取權限,但拒絕公開列表。 我的代碼將完全沒有令牌和隨機數生成。 自動生成的ID應該是唯一的,因此應該難以猜測。

通過查看Firebase.js ,似乎自動生成的ID的前8個字符是基於當前時間戳記的,接下來的12個字符是使用Math.random()隨機生成的。 我假設iOS框架做同樣的事情,盡管我看不到代碼,但是庫鏈接到SecRandomCopyBytesarc4random

就我而言,這看起來已經足夠好了,但是有沒有人看到Firebase提供的關於我們是否可以依靠這種行為的指導? 我討厭構建假定這些名稱是相對強壯的隨機字符串的代碼,然后在升級到較新版本的Firebase時違反了該假設。

Firebase提供的自動生成的ID的目的是允許開發人員以分布式方式創建按時間順序排列的列表。 它依靠Math.random和時間戳生成該客戶端唯一的ID。

但是,如果您打算將自動ID用作安全密鑰,則取決於您希望系統的安全程度,它可能不是最好的主意。 Math.random 不是加密安全的隨機數生成器,並且由於push()依賴於它,因此它生成的ID也不是。

但是,一般的概念是讓用戶訪問Firebase中的某些數據(如果他們知道密鑰的話)。 我們有一個使用這種類型的安全規則的示例 ,但不是使用推送ID,而是使用內容本身的SHA-256哈希(在這種情況下,它們是圖像)。 散列內容以生成密鑰比依賴push()ID更安全。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM