簡體   English   中英

Firebase 實時數據庫規則的安全性

[英]Security of firebase realtime database rules

在我的應用程序中,我使用自定義聲明為用戶分配角色。 管理員可以使用時髦的切換按鈕(使用雲功能)更改人員的角色,因此(她)需要查看所有用戶的列表......但另一方面,當用戶注冊時,他們需要添加到用戶數據庫集合中。 這個集合顯然不用於授權任何東西,但它只是為了管理員可以更改該集合中用戶的角色。 所以管理員需要能夠讀取表格,每個人都需要能夠在集合中寫入......所以我在這方面的規則如下所示:

    {
      "rules": {
        "users": {
          ".read": "auth.token.isAdmin === true",
          ".write": true
        },

我已經檢查了 redux 商店,它似乎有效。 我調用 action creator 獲取組件中的用戶並在我是普通用戶時訪問它,我看到 redux 存儲中的用戶節點仍然是空的......當我以管理員身份登錄並轉到組件時,我看到用戶節點被填滿了......所以它似乎工作,但我想確保這是一種安全的工作方式,因為讓每個人都寫到桌子上感覺不對:-)但是就像我說的,桌子本身不用於授權任何東西,所以也許沒關系.....

感謝您對此的任何意見:-)

親切的問候,大衛

您擁有的是一個相當常見的模式:每個人都可以編寫請求,但只有授權用戶才能讀取請求。

這種模式不存在泄露信息的固有安全風險,只要您確保只有授權用戶擁有isAdmin == true


但是現在任何用戶都可以向/users節點寫入任何他們想要的內容。 這也意味着任何用戶都可以通過一個簡單的: firebase.database().ref("users").remove()調用刪除所有現有數據。 這可能是您想要防范的。

如何做到這一點取決於用戶寫入/users方式和內容。 例如,如果他們在他們的下面編寫自己的用戶配置文件,而您使用他們的 UID 作為密鑰,則可以確保用戶只能使用以下內容編寫自己的配置文件:

{
  "rules": {
    "users": {
      ".read": "auth.token.isAdmin === true",
      "$uid": {
        ".write": "auth.uid === $uid"
      }
    }
  }
}

如前所述,這取決於您編寫的實際數據,因此您需要查看有關保護數據訪問的 Firebase 文檔並為您的用例實施該文檔。


我會考慮一件事是限制哪些用戶可以寫入到數據庫中的這個節點。 例如,您可以使用.validate規則來限制他們可以寫入的值,甚至可以使用.write規則來確保用戶只寫入他們自己的數據。

暫無
暫無

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

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