Unikaj niepewnych zasad

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

Jeśli otrzymasz powiadomienie, że Twoje dane nie są odpowiednio zabezpieczone, przejrzyj często popełniane błędy i zaktualizuj wszystkie podatne na ataki reguły.

Uzyskaj dostęp do reguł bezpieczeństwa Firebase

Aby wyświetlić istniejące reguły, użyj interfejsu CLI Firebase lub konsoli Firebase. Pamiętaj, aby konsekwentnie edytować reguły przy użyciu tej samej metody, aby uniknąć omyłkowego 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 swój projekt, a następnie przejdź do Bazy danych czasu rzeczywistego , Cloud Firestore lub Magazynu . Kliknij Reguły , gdy znajdziesz się w odpowiedniej bazie danych lub zasobniku pamięci.

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

Poznaj reguły bezpieczeństwa Firebase

Reguły bezpieczeństwa Firebase chronią Twoje dane przed złośliwymi użytkownikami. Tworząc instancję bazy danych lub zasobnik Cloud Storage w konsoli Firebase, możesz albo odmówić dostępu wszystkim użytkownikom ( tryb zablokowany ), albo przyznać dostęp wszystkim użytkownikom ( tryb testowy ). Chociaż podczas programowania możesz chcieć bardziej otwartej konfiguracji, przed wdrożeniem aplikacji poświęć trochę czasu na prawidłowe skonfigurowanie reguł i zabezpieczenie danych.

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 regułami

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

Otwarty dostęp

Podczas konfigurowania projektu Firebase mogłeś ustawić reguły zezwalające na 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, będzie mógł ukraść, zmodyfikować lub usunąć dane.

Niezalecane: Dostęp do odczytu i zapisu dla wszystkich użytkowników.

Chmura 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 hierarchii danych. Jednym z typowych rozwiązań tej niepewności są zabezpieczenia oparte na użytkownikach z uwierzytelnianiem Firebase. Dowiedz się więcej o uwierzytelnianiu użytkowników za pomocą reguł .

Chmura 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ą dalej 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.

Chmura 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: Wąski dostęp przy użyciu warunków bezpieczeństwa.

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

Chmura Firestore

Baza danych czasu rzeczywistego

Magazyn w chmurze

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

Reguły bezpieczeństwa bazy danych w czasie rzeczywistym są kaskadowane, przy czym reguły na płytszych ścieżkach nadrzędnych zastępują reguły na głębszych węzłach podrzędnych. Kiedy piszesz regułę w węźle podrzędnym, pamiętaj, że może ona nadawać jedynie dodatkowe uprawnienia. Nie możesz udoskonalić ani odwołać dostępu do danych na głębszej ścieżce w bazie danych.

Niezalecane: Udoskonalanie reguł w ś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 szerokie reguły w ścieżkach nadrzędnych i przyznaj bardziej szczegółowe uprawnienia w ścieżkach podrzędnych. Jeśli Twoje potrzeby w zakresie dostępu do danych wymagają większej szczegółowości, zachowaj szczegółowość reguł. Dowiedz się więcej o kaskadowym regułach bezpieczeństwa bazy danych w czasie rzeczywistym w podstawowej składni reguł bezpieczeństwa bazy danych w czasie rzeczywistym .

Zamknięty dostęp

Innym typowym podejściem podczas tworzenia aplikacji jest blokowanie danych. Zazwyczaj oznacza to, że dostęp do odczytu i zapisu został zamknięty dla wszystkich użytkowników w następujący sposób:

Chmura 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 nadal mają dostęp do Twojej bazy danych. Skorzystaj z tych reguł, jeśli zamierzasz używać Cloud Firestore lub Realtime Database jako backendu tylko dla serwera w połączeniu z pakietem Firebase Admin SDK. Chociaż jest to bezpieczne, należy sprawdzić, czy klienci aplikacji mogą poprawnie pobierać dane.

Dowiedz się więcej o regułach bezpieczeństwa Cloud Firestore i ich działaniu w artykule Pierwsze kroki z regułami bezpieczeństwa Cloud Firestore .

Przetestuj 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 uruchomić i zautomatyzować testy jednostkowe w środowisku lokalnym przed wdrożeniem jakichkolwiek zmian.

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