Firebase 安全性檢查清單

保留 Firebase 資源和使用者資料安全,請遵循 準則。不是所有項目都應符合你的需求,但保留 因此您在開發應用程式時 會考慮到這些原則

避免濫用流量

為後端服務設定監控和快訊功能

如要偵測濫用流量 (例如阻斷服務 (DOS) 攻擊),請設定 監控及快訊 Cloud FirestoreRealtime Database, Cloud StorageHosting

如果您懷疑應用程式遭到攻擊, 請盡快與支援團隊聯絡, 並說明情況。

啟用 App Check

如要確保只有應用程式可以存取後端服務,請啟用 每個支援 Firebase App Check 的服務。

設定 Cloud Functions 以針對正常流量調度資源

Cloud Functions 會根據應用程式的需求自動調整資源配置,但在 這可能意味著大筆費用如要避免這種情況發生,您可以 限制並行執行個體數量 針對應用程式的正常流量預測出的功能

設定快訊,在即將達到上限時接收通知

如果您的服務要求用量突然提高,通常會啟動配額並自動啟動 來限制應用程式的流量請務必監控 「用量與計費」資訊主頁 但您也可以 設定預算快訊 ,以便在資源用量超出預期時收到通知。

防止自我 DOS:使用模擬器在本機測試函式

開發應用程式時很容易出錯 Cloud Functions:例如建立無限的觸發條件/寫入迴圈。 如要避免這些錯誤影響已上線的服務,請 使用 Firebase Local Emulator Suite 開發應用程式。

若您自行不小心執行 DOS,只要刪除函式即可取消部署 從 index.js,然後跑 firebase deploy --only functions

在較不重要的情況下,即時回應應保持一定的結構

如果您不需要即時呈現函數的結果 分批處理結果,防範濫用流量:發布 CANNOT TRANSLATE Pub/Sub敬上 主題及定期處理結果,並以 排程函式

瞭解 API 金鑰

Firebase 服務的 API 金鑰不是密鑰

Firebase 只會在 Firebase 中透過 API 金鑰辨識您應用程式的 Firebase 專案 也無法控管資料庫或 Cloud Storage 資料的存取權, 使用 Firebase Security Rules。因此,您「不需要」 將 Firebase 服務的 API 金鑰視為密鑰,您可以安全地嵌入這些金鑰 。進一步瞭解 適用於 Firebase 的 API 金鑰

設定 API 金鑰限制

防止攻擊者試圖使用你的 API 金鑰達成以下額外標準: 就可以加入 API 金鑰限制 ,將 API 金鑰的範圍限定為您的應用程式用戶端和您使用的 API。

保留 FCM 個伺服器金鑰

有別於 Firebase 服務的 API 金鑰,FCM 伺服器金鑰 ( 舊版 FCM HTTP API) 屬於敏感內容,因此必須保密。

保留服務帳戶金鑰密鑰

此外,與 Firebase 服務的 API 金鑰不同,服務帳戶私密金鑰 (使用 Firebase Admin SDK) 具有敏感度 請務必保密

Firebase Security Rules

初始化實際工作環境或鎖定模式下的規則

設定 Cloud FirestoreRealtime DatabaseCloud Storage 時,請初始化 預設拒絕所有存取的安全性規則,並新增規則來授予存取權 開發應用程式的某些資源

針對「Cloud Firestore」(正式環境) 的新執行個體使用其中一項預設設定 模式) 和 Realtime Database (鎖定模式)。Cloud Storage 裝置應從安全機制開始 如下所示:

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

安全性規則屬於結構定義。在新增文件時新增規則

請勿在您編寫應用程式後編寫安全性規則,以免做為正式發布前測試之用 工作。而是應該在編寫應用程式時編寫安全性規則,就像 資料庫結構定義:每當您需要使用新的文件類型或路徑結構時, 編寫安全性規則

使用 Local Emulator Suite 單元測試安全性規則。將其新增至 CI

如要確保您的安全性規則能跟上應用程式的開發作業 使用 Firebase Local Emulator Suite敬上 並將這些測試新增至持續整合管道。請參閱下列指南: Cloud Firestore敬上 和 Realtime Database

驗證

自訂驗證:建立來自受信任 (伺服器端) 環境的 JWT

如果您已有安全的登入系統,無論是自訂系統或 就可以使用現有的系統 Firebase 服務。建立自訂 JWT 然後將權杖傳遞至您的客戶,該用戶端會使用 驗證權杖 (iOS+Android網頁版UnityC++)。

如需透過第三方供應商使用自訂驗證功能的範例,請參閱 網誌文章 使用 Okta 向 Firebase 進行驗證

管理化驗證:OAuth 2.0 供應商是最安全的

如果您使用 Firebase 的代管驗證功能,請使用 OAuth 2.0 / OpenID 連結供應商選項 (Google、Facebook 等) 是最安全的選項。個人中心 如果可以 (視您的使用者而定),應支援一或多個這些供應商 )。

電子郵件密碼驗證:為登入端點設定嚴格的配額,防範暴力攻擊

如果您使用 Firebase 的代管電子郵件密碼驗證服務,請強化 identitytoolkit.googleapis.com 端點的預設配額以防止暴力 不可抗力您可以前往 Identity Toolkit API 頁面Google Cloud

電子郵件密碼驗證:啟用電子郵件列舉防護功能

如果您使用 Firebase 的代管電子郵件密碼驗證服務, 啟用電子郵件列舉防護功能, 可防止惡意人士濫用專案的驗證端點 猜測帳戶名稱

升級至 Google Cloud Identity Platform 以使用多重驗證

為了提高登入安全性,你可以新增多重驗證支援功能 升級至 Google Cloud Identity Platform。 升級之後,現有的 Firebase Authentication 代碼仍可使用。

匿名驗證

僅針對暖機使用匿名驗證機制

只在使用者尚未驗證時,才使用匿名驗證功能儲存使用者的基本狀態 實際登入匿名驗證無法取代使用者 登入。

協助使用者在其他裝置上登入自己的帳戶

當使用者清除本機資料,匿名驗證資料將不會保留下來 以及切換裝置如需在應用程式重新啟動後保留資料 單一裝置 將使用者轉換為永久帳戶

使用安全性規則,要求使用者先轉換為登入服務供應商,或驗證電子郵件

任何人都能在您的專案中建立匿名帳戶。瞭解這些之後 如何保護所有非公開資料 要求特定登入方式或已驗證的電子郵件地址的安全性規則

例如:

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

Cloud Functions安全

請勿在環境變數中加入機密資訊

通常在自行託管的 Node.js 應用程式中,您可以使用環境變數 私密資訊,例如私密金鑰 請勿在 Cloud Functions 中執行此操作。因為 Cloud Functions 重複使用 函式叫用之間的環境,不應含有機密資訊 儲存於環境中

  • 如要儲存 Firebase API 金鑰 (即「非」密鑰), 嵌入程式碼即可

  • 如果您在 Cloud Functions 中使用 Firebase Admin SDK,則不需要 明確提供服務帳戶憑證,因為 Admin SDK 通常在初始化期間會自動取得容器和資產。

  • 如要呼叫需要服務帳戶的 Google 和 Google Cloud API 憑證,Node.js 適用的 Google 驗證程式庫就能取得這些憑證 從 應用程式預設憑證 這項資訊會自動填入 Cloud Functions

  • 如要將非 Google 服務的私密金鑰和憑證提供給您的 Cloud Functions,使用 Secret Manager

加密機密資訊

如果您無法避免將機密資訊傳送至函式,您必須 您可以自行建立用來加密資訊的自訂解決方案。

簡單的函式比較安全;如果需要複雜度,請考慮使用 Cloud Run

因此請盡可能讓函式保持精簡且易於理解。複雜度 通常會導致難以發現的錯誤或非預期的行為。

如果您需要複雜的邏輯或環境設定,建議您使用 Cloud Run 而非 Cloud Functions

環境管理

設定開發和測試專案

設定不同的 Firebase 專案,以便用於開發、測試和正式環境。 除非用戶端程式碼經過測試環境測試,否則請勿將程式碼合併至實際工作環境 專案。

限制團隊對正式環境資料的存取權

如果您與較大的團隊合作,可以減輕錯誤後果 限制實際工作環境資料存取權,方法是使用 預先定義的 IAM 角色自訂角色

如果團隊使用Firebase Local Emulator Suite (建議做法) 進行開發時,您可能不需要將存取權限授予 實際工作環境專案

圖書館管理

留意資料庫是否有拼寫錯誤或新的維護程式

在專案中新增程式庫時,請留意 程式庫及其維護人員名稱與您打算要共用的程式庫相似 安裝可能含有惡意程式碼。

請勿在無法瞭解異動內容的情況下更新程式庫

升級前,請查看所用程式庫的變更記錄。請務必 升級可帶來附加價值,同時檢查維護人員是否仍是你 信任關係

將監控計時器程式庫安裝為開發或測試依附元件

使用 Snyk 等程式庫掃描專案 。

Cloud Functions 設定監控功能。更新圖書館後再查看

如果您使用 Cloud Functions Logger SDK,然後 你可以 監控並接收快訊 異常行為,包括程式庫更新造成的行為。