簡體   English   中英

Firebase 防止實時數據庫惡意更新

[英]Firebase prevent malicious update in real-time database

我正在嘗試使用 firebase 實時數據庫開發一個實時匿名隊列。 這個概念是當一個人訪問我的網頁時,它會生成一個 UUID 並在 firebase DB 插入一條記錄。 根據 UUID 的 position,我將確定該用戶在隊列中的 position。 以下是文件樣本:-

{
    _random_key_1: {
        uuid: '47c044c7-da32-4e37-a416-cb2d621e0e39',
        is_finished: false
    },
    _random_key_2: {
        uuid: 'bcb8e01f-7745-43aa-9897-fd217d755769',
        is_finished: false
    },
    _random_key_3: {
        uuid: 'cdf754bd-4626-4da1-b676-9ebe87927a04',
        is_finished: false
    },
}

在這里,隊列ID cdf754bd-4626-4da1-b676-9ebe87927a04的用戶的position是3。當隊列前面的人完成他的事情時,我將用is_finished更新他的隊列is_finished: true並重新計算其他人的position連接到這個數據庫。

例如,假設第一個用戶 ( 47c044c7-da32-4e37-a416-cb2d621e0e39 ) 完成了他的事情。 以下是文檔的外觀

{
    _random_key_1: {
        uuid: '47c044c7-da32-4e37-a416-cb2d621e0e39',
        is_finished: true
    },
    _random_key_2: {
        uuid: 'bcb8e01f-7745-43aa-9897-fd217d755769',
        is_finished: false
    },
    _random_key_3: {
        uuid: 'cdf754bd-4626-4da1-b676-9ebe87927a04',
        is_finished: false
    },
}

現在,隊列ID cdf754bd-4626-4da1-b676-9ebe87927a04的用戶的position是二,因為他面前只有一個人有未完成的任務。

問題是因為我所有這些都來自前端(因為我預計應用程序負載很重並且不打算讓我的后端服務器超載),任何人都可以竊取我的 firebase 憑據並惡意設置is_finished = true給前面的每個人他。

我該如何防止這種情況發生?

您可以使用 Firebase 的服務器端安全規則來控制用戶可以寫入的內容。 由於這些是在服務器上強制執行的,因此用戶無法從客戶端代碼中繞過它們。

例如,如果用戶只能添加is_finished設置為 false 的項目,則可以使用驗證規則來強制執行。 這確實需要您可以區分普通用戶和處理隊列項目的用戶,因此通常意味着您要么想要使用Firebase 身份驗證來識別它們 - 或者在受信任的環境中使用 Firebase 的管理員 SDK 之一運行處理代碼(例如您的開發機器、您控制的服務器或 Renaud 提到的 Cloud Functions/Cloud Run)。

還可以考慮使用Firebase App Check ,這使得惡意用戶更難使用您的配置密鑰運行他們自己的代碼。 雖然這有助於防止濫用,但並不能保證杜絕所有惡意使用,因此您仍應采用上述方法。

暫無
暫無

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

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