Firebase 安全檢查清單

為確保您的 Firebase 資源和用戶數據安全,請遵循以下準則。並非每個項目都一定適用於您的要求,但在開發應用程序時請記住它們。

避免濫用交通

為後端服務設置監控和警報

為了檢測濫用流量,如拒絕服務(DOS)攻擊,建立監測和報警雲公司的FireStore實時數據庫雲存儲主機

如果您懷疑您的應用程序的攻擊,伸出手來支持,盡快讓他們知道發生了什麼。

啟用應用檢查

為了幫助確保只有您的應用程序可以訪問你的後端服務,使應用程序檢查為每個服務支持它。

配置您的 Cloud Functions 以針對正常流量進行擴展

Cloud Functions 會自動擴展以滿足您的應用程序的需求,但如果發生攻擊,這可能意味著一筆巨額賬單。為了避免這種情況,可以限制並發實例的數量根據你的應用程序的正常流量的功能。

設置警報以在接近限制時收到通知

如果您的服務有請求高峰,通常會啟動配額,並自動限制應用程序的流量。確保監控您的使用和計費的儀表板,但你也可以設置預算提醒你的項目時的資源使用情況超出預期得到通知。

防止自我 DOSes:使用模擬器在本地測試功能

在開發 Cloud Functions 時,很容易意外地自己 DOS 運行:例如,通過創建無限的觸發-寫入循環。您可以防止這些錯誤因與做你的發展影響Live服務火力地堡仿真器套件

(如果你從刪除它做意外DOS自己,取消部署功能index.js然後運行firebase deploy --only functions 。)

在實時響應不那麼重要的地方,結構發揮防禦作用

如果你不需要出示實時功能的結果,則可以通過處理批次的結果減輕對濫用交通:公佈結果的發布/訂閱的話題,並與處理定期結果預定功能.

了解 API 密鑰

Firebase 服務的 API 密鑰不是秘密

火力地堡使用API密鑰只認你的應用程序的火力點項目火力地堡的服務,而不是數據庫或雲存儲數據,這是使用進行控制訪問火力地堡的安全規則。因此,您無需將 Firebase 服務的 API 密鑰視為機密,並且可以安全地將它們嵌入到客戶端代碼中。詳細了解了火力地堡的API密鑰

設置 API 密鑰範圍

作為對攻擊者的額外的威懾試圖使用您的API密鑰,以惡搞的請求,您可以創建API密鑰作用域為您的應用程序客戶端

保密 FCM 服務器密鑰

對於火力地堡服務與API密鑰,FCM服務器密鑰(使用的傳統FCM HTTP API敏感的,必須保密。

保密服務帳號密鑰

也為火力地堡服務不同於API密鑰,服務帳戶私鑰(由所使用的管理員SDK敏感的,必須保密。

安全規則

在生產或鎖定模式下初始化規則

當您設置 Cloud Firestore、實時數據庫和 Cloud Storage 時,初始化您的安全規則以默認拒絕所有訪問,並在您開發應用程序時添加授予對特定資源的訪問權限的規則。

這是 Cloud Firestore(生產模式)和實時數據庫(鎖定模式)新實例的默認設置之一。設置新數據庫實例時選擇此選項。

對於 Cloud Storage,從安全規則配置開始,如下所示:

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if false;
    }
  }
}

安全規則是一種模式;添加文檔時添加規則

不要在編寫應用程序後編寫安全規則,作為一種預啟動任務。相反,在編寫應用程序時編寫安全規則,將它們視為數據庫架構:每當您需要使用新的文檔類型或路徑結構時,首先編寫其安全規則。

使用 Emulator Suite 單元測試安全規則;將其添加到 CI

為了確保您的安全規則跟上你的應用程序的開發,單元測試與您的規則火力地堡仿真器套件和這些測試添加到您的CI管道。見這些指南對雲計算公司的FireStore實時數據庫

驗證

自定義身份驗證:從可信(服務器端)環境中創建 JWT

如果您已經擁有安全登錄系統,無論是自定義系統還是第三方服務,您都可以使用現有系統對 Firebase 服務進行身份驗證。創建自定義JWTs從一個值得信賴的環境,然後將令牌傳遞到客戶端,它使用令牌進行身份驗證(的iOS安卓網絡團結C ++ )。

對於使用與第三方供應商的定制驗證的示例,請參閱博客文章,身份驗證使用1563火力地堡

託管身份驗證:OAuth 2.0 提供商是最安全的

如果您使用 Firebase 的託管身份驗證功能,則 OAuth 2.0 / OpenID Connect 提供程序選項(Google、Facebook 等)是最安全的。如果可以,您應該支持這些提供商中的一個或多個(取決於您的用戶群)。

電子郵件密碼身份驗證:為登錄端點設置嚴格的配額以防止暴力攻擊

如果您使用火力地堡的管理電子郵件地址和密碼認證服務,收緊的默認配額identitytoolkit.googleapis.com端點,以防止暴力攻擊。你可以從這樣做的API在谷歌的雲控制台頁

升級到 Cloud Identity Platform 以進行多重身份驗證

有關登錄額外的安全性,您可以通過升級來添加多因素身份驗證支持雲身份平台。升級後,您現有的 Firebase 身份驗證代碼將繼續有效。

匿名認證

僅使用匿名身份驗證進行熱啟動

僅在用戶實際登錄之前使用匿名身份驗證為用戶保存基本狀態。匿名身份驗證不能替代用戶登錄。

如果用戶在丟失手機時需要數據,請將其轉換為另一種登錄方式

如果用戶清除本地存儲或切換設備,匿名身份驗證數據將不會保留。如果您需要堅持在單個設備上的應用程序之外重新啟動數據,用戶轉換為常住戶口

使用要求用戶已轉換為登錄提供商或已驗證其電子郵件的安全規則

任何人都可以在您的項目中創建匿名帳戶。考慮到這一點,保護所有的非公開數據需要特定的登錄方法或驗證的電子郵件地址的安全規則

例如:

allow write: if request.auth.token.firebase.sign_in_provider != "anonymous";
allow write: if request.auth.token.email_verified = true;

環境管理

設置開發和暫存項目

為開發、暫存和生產設置單獨的 Firebase 項目。在針對臨時項目進行測試之前,不要將客戶端代碼合併到生產環境中。

限制團隊訪問生產數據

如果你有一個更大的團隊工作,你可以通過限制訪問使用任何生產數據減輕錯誤和違反的後果預定義角色或自定義角色的IAM。

如果您的團隊使用模擬器套件進行開發,您可能不需要授予對生產項目更廣泛的訪問權限。

圖書館管理

注意庫的拼寫錯誤或新的維護者

在向項目中添加庫時,請密切注意庫的名稱及其維護者。與您打算安裝的庫名稱相似的庫可能包含惡意代碼。

不要在不了解更改的情況下更新庫

在升級之前查看您使用的任何庫的更改日誌。確保升級增加了價值,並檢查維護者是否仍然是您信任的一方。

將看門狗庫安裝為開發或測試依賴項

使用庫如Snyk掃描您的項目不安全的依賴。

為功能設置監控;在庫更新後檢查它

如果使用雲功能記錄器的SDK ,可以監視和提醒的異常行為,包括對由於庫的更新行為。

雲功能安全

切勿將敏感信息放入 Cloud Functions 的環境變量中

通常在自託管的 Node.js 應用程序中,您使用環境變量來包含私鑰等敏感信息。不要在雲功能做到這一點。由於 Cloud Functions 在函數調用之間重用環境,因此不應將敏感信息存儲在環境中。

  • 要保存火力地堡API密鑰,這是不是秘密,只是將它們嵌入代碼。
  • 如果您在 Cloud Function 中使用 Firebase Admin SDK,則無需明確提供服務帳號憑據,因為 SDK 可以在初始化期間自動獲取它們。
  • 如果你打電話要求服務帳戶憑據谷歌和谷歌雲API,谷歌的驗證庫Node.js的可以從這些憑證應用默認憑據,這是在雲計算功能自動填充。
  • 為了使私鑰和憑證提供給您的雲計算功能的非谷歌的服務,用雲的秘密經理

加密敏感信息

如果您無法避免將敏感信息傳遞給您的 Cloud Function,您必須想出您自己的自定義解決方案來加密信息。

簡單的功能更安全;如果您需要復雜性,請考慮 Cloud Run

盡量讓您的 Cloud Functions 函數簡單易懂。函數的複雜性通常會導致難以發現的錯誤或意外行為。

如果確實需要複雜的邏輯或環境配置,可以考慮使用雲中運行,而不是雲功能。