Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

避免不安全的規則

使用本指南了解 Firebase 安全規則配置中的常見漏洞,查看並更好地保護您自己的規則,並在部署之前測試您的更改。

如果您收到數據未得到適當保護的警報,請查看這些常見錯誤並更新任何易受攻擊的規則。

訪問您的 Firebase 安全規則

要查看您現有的規則,請使用 Firebase CLI 或 Firebase 控制台。確保始終使用相同的方法編輯規則,以避免錯誤地覆蓋更新。如果您不確定本地定義的規則是否反映了最近的更新,Firebase 控制台將始終顯示 Firebase 安全規則的最近部署版本。

從接入您的規則火力地堡控制台,選擇項目,然後導航到實時數據庫雲計算公司的FireStore存儲。按此規則,一旦你在正確的數據庫或存儲桶是。

從火力地堡CLI訪問規則,請在您提到的規則文件firebase.json文件

了解 Firebase 安全規則

Firebase 安全規則保護您的數據免受惡意用戶的侵害。當您創建的火力地堡控制台數據庫實例或雲端存儲,您可以選擇是拒絕訪問所有用戶(鎖定模式)或授予訪問所有用戶(測試模式)。雖然在開發過程中您可能需要更開放的配置,但請確保在部署應用程序之前花時間正確配置規則並保護數據。

當你正在開發應用程序,並為您的規則測試不同的配置,使用一個本地火力地堡模擬器來在本地開發環境中運行你的應用程序。

規則不安全的常見場景

在您部署應用程序之前,您可能已默認設置或在最初開發應用程序時設置的規則應進行審查和更新。通過避免以下常見陷阱,確保正確保護用戶數據。

開放獲取

在設置 Firebase 項目時,您可能已將規則設置為在開發期間允許開放訪問。您可能認為您是唯一使用您的應用程序的人,但如果您已經部署了它,它就可以在 Internet 上使用。如果您沒有對用戶進行身份驗證和配置安全規則,那麼任何猜測您項目 ID 的人都可以竊取、修改或刪除數據。

不推薦:閱讀並為所有用戶進行寫訪問。

雲防火牆

// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this ruleset in production; it allows
// anyone to overwrite your entire database.

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

實時數據庫

{
  // Allow read/write access to all users under any conditions
  // Warning: **NEVER** use this ruleset in production; it allows
  // anyone to overwrite your entire database.

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

雲儲存

// Anyone can read or write to the bucket, even non-users of your app.
// Because it is shared with App Engine, this will also make
// files uploaded via App Engine public.
// Warning: This rule makes every file in your Cloud Storage bucket accessible to any user.
// Apply caution before using it in production, since it means anyone
// can overwrite all your files.

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}
    
解決方案:規則,限制讀取和寫入訪問。

構建對您的數據層次結構有意義的規則。這種不安全性的常見解決方案之一是使用 Firebase 身份驗證的基於用戶的安全性。了解更多關於驗證用戶的規則

雲防火牆

實時數據庫

雲儲存

任何經過身份驗證的用戶的訪問權限

有時,規則會檢查用戶是否已登錄,但不會根據該身份驗證進一步限制訪問。如果你的規則之一包括auth != null ,請確認您想要的任何登錄的用戶有權訪問數據。

不推薦:任何已登錄的用戶閱讀和整個數據庫的寫入權限。

雲防火牆

service cloud.firestore {
  match /databases/{database}/documents {
    match /some_collection/{document} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

實時數據庫

{
  "rules": {
    ".read": "auth.uid != null",
    ".write": "auth.uid != null"
  }
}

雲儲存

// Only authenticated users can read or write to the bucket
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}
解決方案:使用安全狀況窄的訪問。

在檢查身份驗證時,您可能還想使用身份驗證屬性之一來進一步限制對特定數據集的特定用戶的訪問。了解更多有關不同的身份驗證特性

雲防火牆

實時數據庫

雲儲存

(實時數據庫)不正確的繼承規則

實時數據庫規則級聯,規則位於更淺的父路徑覆蓋更深的子節點的規則。在子節點編寫規則時,請記住它只能授予額外的權限。您無法優化或撤銷對數據庫中更深路徑的數據的訪問。

不建議:在孩子路徑煉油規則
{
  "rules": {
     "foo": {
        // allows read to /foo/*
        ".read": "data.child('baz').val() === true",
        "bar": {
          /* ignored, since read was allowed already */
          ".read": false
        }
     }
  }
}
解決方法:在這個廣闊,並且在子路徑給予更具體的權限,如果你的數據訪問需求需要更多的粒度,使您的規則顆粒狀父路徑編寫規則。了解更多關於在級聯實時數據庫規則保護您的數據

封閉式通道

在開發應用程序時,另一種常見方法是鎖定數據。通常,這意味著您已關閉對所有用戶的讀寫訪問權限,如下所示:

雲防火牆

// Deny read/write access to all users under any conditions
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

實時數據庫

{
  "rules": {
    ".read": false,
    ".write": false
  }
}
    

雲儲存

// Access to files through Cloud Storage is completely disallowed.
// Files may still be accessible through App Engine or Google Cloud Storage APIs.

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

Firebase Admin SDK 和 Cloud Functions 仍然可以訪問您的數據庫。如果您打算將 Cloud Firestore 或實時數據庫用作與 Firebase Admin SDK 結合使用的僅限服務器的後端,請使用這些規則。雖然它是安全的,但您應該測試您的應用程序的客戶端是否可以正確檢索數據。

了解更多關於雲計算公司的FireStore安全規則和他們是怎麼工作與雲計算公司的FireStore安全規則入門

測試您的 Cloud Firestore 安全規則

要檢查您的應用程序的行為和驗證您的雲計算公司的FireStore安全規則配置,使用火力地堡模擬器。在部署任何更改之前,使用 Cloud Firestore 模擬器在本地環境中運行和自動執行單元測試。

可以快速有效的火力地堡火力地堡控制台安全規則,使用火力地堡規則模擬器