Unikaj niezabezpieczonych reguł

Z tego przewodnika dowiesz się, jakie są typowe luki w zabezpieczeniach Firebase Security Rules konfiguracji, jak sprawdzić i lepiej zabezpieczyć własne reguły oraz jak przetestować zmiany przed ich wdrożeniem.

Jeśli otrzymasz alert o tym, że Twoje dane nie są odpowiednio zabezpieczone, sprawdź te często popełniane błędy i zaktualizuj wszystkie podatne na ataki reguły.

Aby uzyskać pomoc AI, skopiuj poniższy prompt do agenta kodowania AI (np. Gemini w Android Studio, Antigravity, Claude Code, Codex i Cursor). Możesz dostosować prompta i współpracować z agentem. Szczegółowe informacje o instalacji znajdziesz w artykule Umiejętności agenta Firebase.

Help me use Firebase in my app.
1. Make sure that **Firebase agent skills** are installed and updated. For Claude Code, Codex, or Cursor agents, help me install the Firebase plugin. For other agents, run `npx skills add firebase/agent-skills`. Always try to use **Firebase agent skills** for Firebase-related tasks.
2. Help me write, validate, and deploy Firebase Security Rules to protect my app's data.

Uzyskaj dostęp do Firebase Security Rules

Aby wyświetlić istniejące Security Rules, użyj interfejsu wiersza poleceń Firebase lub konsoli Firebase. Aby uniknąć przypadkowego zastąpienia aktualizacji, edytuj reguły zawsze tą samą metodą. Jeśli nie masz pewności, czy zdefiniowane lokalnie reguły odzwierciedlają najnowsze aktualizacje, w konsoli Firebase zawsze zobaczysz ostatnio wdrożoną wersję Firebase Security Rules.

Aby uzyskać dostęp do reguł z Firebasekonsoli, wybierz projekt, a następnie kliknij Realtime Database, Cloud Firestore lub Storage. Gdy znajdziesz się w odpowiedniej bazie danych lub zasobniku pamięci, kliknij Reguły.

Aby uzyskać dostęp do reguł z Firebase interfejsu CLI, otwórz plik reguł wskazany w pliku firebase.json.

Zrozumienie Firebase Security Rules

Firebase Security Rules chronić dane przed złośliwymi użytkownikami; Podczas tworzenia instancji bazy danych lub Cloud Storage kosza w Firebase konsoli możesz odmówić dostępu wszystkim użytkownikom (tryb zablokowany) lub przyznać dostęp wszystkim użytkownikom (tryb testowy). Podczas tworzenia aplikacji możesz używać bardziej otwartej konfiguracji, ale przed jej wdrożeniem poświęć czas na prawidłowe skonfigurowanie reguł i zabezpieczenie danych.

Podczas tworzenia aplikacji i testowania różnych konfiguracji reguł używaj jednego z lokalnych emulatorów Firebase, aby uruchamiać aplikację w lokalnym środowisku programistycznym.

Typowe scenariusze z niebezpiecznymi regułami

Security Rules, które mogły zostać skonfigurowane domyślnie lub podczas początkowych prac nad aplikacją, należy sprawdzić i zaktualizować przed wdrożeniem aplikacji. Zadbaj o odpowiednie zabezpieczenie danych użytkowników, unikając tych typowych błędów.

Otwarty dostęp

Podczas konfigurowania projektu w Firebase mogłeś(-aś) ustawić reguły tak, aby zezwalały na otwarty dostęp w trakcie programowania. Może Ci się wydawać, że tylko Ty używasz aplikacji, ale jeśli została ona wdrożona, jest dostępna w internecie. Jeśli nie uwierzytelniasz użytkowników i nie konfigurujesz reguł bezpieczeństwa, każda osoba, która odgadnie identyfikator Twojego projektu, może ukraść, zmodyfikować lub usunąć dane.

Nie zalecane: dostęp do odczytu i zapisu dla wszystkich użytkowników.

Cloud Firestore

// 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;
    }
  }
}

Realtime Database

{
  // 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
  }
}
    

Cloud Storage

// 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 using 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;
    }
  }
}
    
Rozwiązanie: reguły ograniczające uprawnienia do odczytu i zapisu.

Twórz reguły, które pasują do Twojej hierarchii danych. Jednym z popularnych rozwiązań tego problemu jest zabezpieczenie oparte na użytkownikach z Firebase Authentication. Dowiedz się więcej o uwierzytelnianiu użytkowników za pomocą reguł.

Cloud Firestore

Realtime Database

Cloud Storage

Dostęp dla każdego uwierzytelnionego użytkownika

Czasami Security Rules sprawdzają, czy użytkownik jest zalogowany, ale nie ograniczają dostępu na podstawie uwierzytelniania. Jeśli jedna z Twoich reguł zawiera auth != null, potwierdź, że chcesz, aby każdy zalogowany użytkownik miał dostęp do danych.

Nie zalecane: każdy zalogowany użytkownik ma dostęp do odczytu i zapisu w całej bazie danych.

Cloud Firestore

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

Realtime Database

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

Cloud Storage

// 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;
    }
  }
}
Rozwiązanie: ograniczenie dostępu za pomocą warunków bezpieczeństwa.

Podczas sprawdzania uwierzytelniania możesz też użyć jednej z właściwości uwierzytelniania, aby dodatkowo ograniczyć dostęp do określonych użytkowników w przypadku konkretnych zbiorów danych. Dowiedz się więcej o różnych właściwościach uwierzytelniania.

Cloud Firestore

Realtime Database

Cloud Storage

(Realtime Database) Nieprawidłowo odziedziczone reguły

Realtime Database Security Rules kaskadowo, przy czym reguły na płytszych ścieżkach nadrzędnych zastępują reguły na głębszych węzłach podrzędnych. Pamiętaj, że reguła zapisana w węźle podrzędnym może tylko przyznawać dodatkowe uprawnienia. Nie możesz ograniczyć ani cofnąć dostępu do danych na głębszej ścieżce w bazie danych.

Niezalecane: doprecyzowywanie reguł w przypadku ścieżek podrzędnych
{
  "rules": {
     "foo": {
        // allows read to /foo/*
        ".read": "data.child('baz').val() === true",
        "bar": {
          /* ignored, since read was allowed already */
          ".read": false
        }
     }
  }
}
Rozwiązanie: utwórz reguły w przypadku ścieżek nadrzędnych, które są ogólne, i przyznaj bardziej szczegółowe uprawnienia w przypadku ścieżek podrzędnych. Jeśli Twoje potrzeby związane z dostępem do danych wymagają większej szczegółowości, zachowaj szczegółowe reguły. Dowiedz się więcej o kaskadowości Realtime Database Security Rulespodstawowej składni Realtime Database Security Rules.

Dostęp zamknięty

Podczas tworzenia aplikacji często stosuje się też inne podejście, które polega na zabezpieczeniu danych. Zwykle oznacza to, że dostęp do odczytu i zapisu został zamknięty dla wszystkich użytkowników w następujący sposób:

Cloud Firestore

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

Realtime Database

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

Cloud Storage

// 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;
    }
  }
}

Pakiety Firebase Admin SDK i Cloud Functions nadal mogą uzyskiwać dostęp do Twojej bazy danych. Korzystaj z tych reguł, jeśli zamierzasz używać Cloud Firestore lubRealtime Database jako backendu tylko po stronie serwera w połączeniu z pakietem Firebase Admin SDK. Chociaż jest bezpieczny, warto sprawdzić, czy klienci aplikacji mogą prawidłowo pobierać dane.

Dowiedz się więcej o Cloud Firestore Security Rules i o tym, jak działają w pierwszych krokach z Cloud Firestore Security Rules.

Testowanie Cloud Firestore Security Rules

Aby sprawdzić działanie aplikacji i zweryfikować konfiguracje Cloud Firestore Security Rules, użyj emulatora Firebase. Użyj Cloud Firestoreemulatora, aby uruchamiać i automatyzować testy jednostkowe w środowisku lokalnym przed wdrożeniem jakichkolwiek zmian.

Aby szybko sprawdzić Firebase Security Rules w konsoli Firebase, użyj symulatora reguł Firebase.