Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Unikaj niepewnych zasad

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Skorzystaj z tego przewodnika, aby poznać typowe luki w zabezpieczeniach konfiguracji reguł zabezpieczeń Firebase, przejrzeć i lepiej zabezpieczyć własne reguły oraz przetestować zmiany przed ich wdrożeniem.

Jeśli otrzymasz alert, że Twoje dane nie są odpowiednio zabezpieczone, przejrzyj te często popełniane błędy i zaktualizuj wszelkie wrażliwe reguły.

Uzyskaj dostęp do reguł zabezpieczeń Firebase

Aby wyświetlić istniejące reguły, użyj interfejsu wiersza polecenia Firebase lub konsoli Firebase. Upewnij się, że edytujesz swoje reguły konsekwentnie tą samą metodą, aby uniknąć błędnego nadpisania aktualizacji. Jeśli nie masz pewności, czy reguły zdefiniowane lokalnie odzwierciedlają najnowsze aktualizacje, konsola Firebase zawsze wyświetla najnowszą wdrożoną wersję reguł zabezpieczeń Firebase.

Aby uzyskać dostęp do reguł z konsoli Firebase , wybierz projekt, a następnie przejdź do Bazy danych czasu rzeczywistego , Cloud Firestore lub Storage . Kliknij Reguły , gdy znajdziesz się we właściwej bazie danych lub zasobniku na dane.

Aby uzyskać dostęp do reguł z interfejsu wiersza polecenia Firebase, przejdź do pliku reguł zapisanego w pliku firebase.json .

Omówienie reguł zabezpieczeń Firebase

Reguły zabezpieczeń Firebase chronią Twoje dane przed złośliwymi użytkownikami. Podczas tworzenia instancji bazy danych lub zasobnika Cloud Storage w konsoli Firebase możesz odmówić dostępu wszystkim użytkownikom ( tryb zablokowany ) lub przyznać dostęp wszystkim użytkownikom ( tryb testowy ). Chociaż możesz potrzebować bardziej otwartej konfiguracji podczas opracowywania, upewnij się, że poświęcisz trochę czasu na prawidłowe skonfigurowanie reguł i zabezpieczenie danych przed wdrożeniem aplikacji.

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

Typowe scenariusze z niepewnymi zasadami

Reguły, które mogłeś skonfigurować domyślnie lub podczas pracy nad tworzeniem aplikacji, powinny zostać przejrzane i zaktualizowane przed wdrożeniem aplikacji. Upewnij się, że odpowiednio zabezpieczasz dane użytkowników, unikając następujących typowych pułapek.

Otwarty dostęp

Podczas konfigurowania projektu Firebase mogłeś ustawić reguły tak, aby umożliwić otwarty dostęp podczas programowania. Możesz myśleć, że jesteś jedyną osobą korzystającą z Twojej aplikacji, ale jeśli ją wdrożyłeś, jest ona dostępna w Internecie. Jeśli nie uwierzytelniasz użytkowników i nie konfigurujesz reguł bezpieczeństwa, każdy, kto odgadnie Twój identyfikator projektu, może ukraść, zmodyfikować lub usunąć dane.

Niezalecane: 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;
    }
  }
}

Baza danych czasu rzeczywistego

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

Magazyn w chmurze

// 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;
    }
  }
}
    
Rozwiązanie: Reguły ograniczające dostęp do odczytu i zapisu.

Twórz reguły, które mają sens dla Twojej hierarchii danych. Jednym z typowych rozwiązań tego braku bezpieczeństwa jest bezpieczeństwo oparte na użytkownikach z uwierzytelnianiem Firebase. Dowiedz się więcej o uwierzytelnianiu użytkowników za pomocą reguł .

Cloud Firestore

Baza danych czasu rzeczywistego

Magazyn w chmurze

Dostęp dla każdego uwierzytelnionego użytkownika

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

Niezalecane: każdy zalogowany użytkownik ma dostęp do odczytu i zapisu całej bazy danych.

Cloud Firestore

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

Baza danych czasu rzeczywistego

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

Magazyn w chmurze

// 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: Zawęź dostęp przy użyciu warunków bezpieczeństwa.

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

Cloud Firestore

Baza danych czasu rzeczywistego

Magazyn w chmurze

(Baza danych czasu rzeczywistego) Nieprawidłowo odziedziczone reguły

Kaskadowe reguły bazy danych czasu rzeczywistego, z regułami na płytszych, ścieżkach nadrzędnych nadrzędnych nad regułami w głębszych węzłach podrzędnych. Kiedy piszesz regułę w węźle podrzędnym, pamiętaj, że może ona nadawać tylko dodatkowe uprawnienia. Nie można doprecyzować ani odwołać dostępu do danych na głębszej ścieżce w bazie danych.

Niezalecane: Dopracowywanie reguł na ścieżkach 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: Napisz reguły w ścieżkach nadrzędnych, które są szerokie, i nadaj bardziej szczegółowe uprawnienia w ścieżkach podrzędnych Jeśli Twoje potrzeby dostępu do danych wymagają większej szczegółowości, zachowaj szczegółowe reguły. Dowiedz się więcej o kaskadowych regułach baz danych czasu rzeczywistego w sekcji Zabezpiecz swoje dane .

Zamknięty dostęp

Podczas tworzenia aplikacji innym powszechnym podejściem jest blokowanie danych. Zazwyczaj oznacza to, że wyłączyłeś dostęp do odczytu i zapisu 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;
    }
  }
}

Baza danych czasu rzeczywistego

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

Magazyn w chmurze

// 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 SDK administratora Firebase i funkcje Cloud Functions mogą nadal uzyskiwać dostęp do Twojej bazy danych. Użyj tych reguł, jeśli zamierzasz używać Cloud Firestore lub Bazy danych czasu rzeczywistego jako zaplecza tylko na serwerze w połączeniu z pakietem Firebase Admin SDK. Chociaż jest to bezpieczne, należy sprawdzić, czy klienci Twojej aplikacji mogą prawidłowo pobierać dane.

Dowiedz się więcej o regułach zabezpieczeń Cloud Firestore i ich działaniu w artykule Wprowadzenie do reguł zabezpieczeń Cloud Firestore .

Przetestuj swoje reguły bezpieczeństwa Cloud Firestore

Aby sprawdzić zachowanie aplikacji i zweryfikować konfiguracje reguł zabezpieczeń Cloud Firestore, użyj emulatora Firebase . Użyj emulatora Cloud Firestore, aby uruchamiać i automatyzować testy jednostkowe w środowisku lokalnym przed wdrożeniem jakichkolwiek zmian.

Aby szybko zweryfikować reguły zabezpieczeń Firebase w konsoli Firebase, użyj symulatora reguł Firebase .