4

我的應用程序使用谷歌的AngularJS + Firebase身份驗證。 當用戶註冊到它會在數據庫中的用戶的輸入的應用程序,如下圖所示:保護授權用戶更新自己的數據的firebase數據

user 
    ->Firebase Unique Key 
      -> UserId: "google ID" 
      -> User Name: "User Name" 
      -> Payment Status:"No" 

現在,一旦用戶登錄,用戶將看到的付款方式,一旦付款已完成數據庫值特定ID會如上面的JSON所示,填充「付款狀態」。一旦付款狀態爲是,則只允許用戶查看主頁面。

我已經創建安全規則,如下圖所示:

{ 
"rules": { 
    ".read": "true", 

    "user":{ 
    ".write": "auth.provider == 'google' && auth.uid!=null" 

    } 
}} 

現在的問題是:誰可以登錄使用谷歌訪問寫入該數據庫中的任何用戶。所以一旦用戶被授權,用戶可以對數據庫進行更改。用戶也可以從本地主機運行他自己的代碼,並可以對數據庫進行更改。我不希望任何用戶破解數據並將支付狀態標記爲「是」並進入主網站。

如何確保授權用戶不會在此數據庫中執行任何惡意行爲。

回答

2

Firebase使用基於身份的安全模型:基於用戶的身份安全地訪問數據。一旦授權用戶編寫特定屬性,他們可以編寫該屬性。

在您的用例中,允許用戶更改其付款狀態似乎不是個好主意。所以他們不應該有權訪問該屬性,無論他們是在運行您的應用程序還是自己的代碼。

所以你必須有另一個實體設置該字段。這可以是人員管理員或服務器。

進行人際互動並不罕見,因爲您可能會想到。許多Web服務首先讓所有者檢查付款並更新受保護的元數據(您的方案中的付款狀態)。一旦這變得難以管理,您可能已準備好接受其他選擇。

A server can run under trusted credentials,執行必要的檢查,然後設置用戶的付款狀態。請注意,這不必是一個非常強大的服務器,因爲它所做的只是與Firebase數據庫進行交互。見this article for a good explanation

+0

感謝弗蘭克的迴應。但是firebase中是否有任何方法來阻止用戶在本地主機上運行相同的代碼副本。由於他們有權訪問數據庫,因此他們肯定可以通過從他們自己的本地主機引用firebase網址來執行任何惡意活動。我嘗試從授權域中刪除本地主機,但在默認情況下,授權域包括:localhost – Lani

+0

「是否有任何方式在firebase中阻止用戶在本地主機上運行相同的代碼副本」否。如果這是您的問題,將標記爲重複。但是想一想:如果用戶正在運行代碼的副本,並且堅持您設置的安全規則,那麼他們可以做什麼惡意用法? –

+1

他們可以通過存儲一些惡意腳本來淹沒數據庫。按照上面給出的答案,只有當我使用服務器時才能停止。但是,如果我只是使用客戶端語言和firebase,那麼在這種情況下,他們可以在數據庫中存儲任何內容,因爲他們可以訪問該數據庫。 – Lani