Catch up on highlights from Firebase at Google I/O 2023. Learn more

Unikaj niepewnych zasad

Skorzystaj z tego przewodnika, aby zrozumieć typowe luki w konfiguracjach Reguł bezpieczeństwa 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 wszelkie podatne reguły.

Uzyskaj dostęp do reguł bezpieczeństwa Firebase

Aby wyświetlić istniejące reguły, użyj interfejsu wiersza polecenia Firebase lub konsoli Firebase. Upewnij się, że edytujesz swoje reguły przy użyciu tej samej metody, konsekwentnie, aby uniknąć omyłkowego nadpisania aktualizacji. Jeśli nie masz pewności, czy Twoje reguły zdefiniowane lokalnie odzwierciedlają najnowsze aktualizacje, konsola Firebase zawsze pokazuje najnowszą wdrożoną wersję Reguł bezpieczeństwa Firebase.

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

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

Zapoznaj się z regułami 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 odmówić dostępu wszystkim użytkownikom ( tryb zablokowany ) lub przyznać dostęp wszystkim użytkownikom ( tryb testowy ). Chociaż podczas opracowywania możesz potrzebować bardziej otwartej konfiguracji, pamiętaj, aby poświęcić trochę czasu na prawidłowe skonfigurowanie reguł i zabezpieczenie danych przed wdrożeniem aplikacji.

Tworząc aplikację i testując różne konfiguracje 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 rozwojem 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 zezwalające na otwarty dostęp podczas programowania. Możesz myśleć, że jesteś jedyną osobą korzystającą z 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 identyfikator Twojego 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 powszechnych rozwiązań tego braku bezpieczeństwa są zabezpieczenia 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ą dalej dostępu na podstawie tego uwierzytelnienia. Jeśli jedna z Twoich reguł obejmuje 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: Wąski dostęp przy użyciu warunków bezpieczeństwa.

Podczas sprawdzania uwierzytelniania możesz również chcieć 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) Niewłaściwie odziedziczone reguły

Kaskada reguł bezpieczeństwa bazy danych w czasie rzeczywistym, z regułami na płytszych ścieżkach nadrzędnych nadrzędnych 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żesz zawęzić ani odwołać dostępu do danych na głębszej ścieżce w bazie danych.

Niezalecane: Doprecyzowanie 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: zapisz reguły w ścieżkach nadrzędnych, które są szerokie, i nadawaj 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 kaskadowaniu reguł bezpieczeństwa bazy danych czasu rzeczywistego w artykule Zabezpiecz swoje dane .

Dostęp zamknięty

Podczas opracowywania aplikacji innym powszechnym podejściem jest blokowanie 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;
    }
  }
}

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 Firebase Admin SDK i 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 zaplecza obsługującego tylko serwer w połączeniu z Firebase Admin SDK. Chociaż jest to bezpieczne, należy przetestować, czy klienci aplikacji mogą prawidłowo pobierać dane.

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

Przetestuj swoje reguły bezpieczeństwa Cloud Firestore

Aby sprawdzić zachowanie aplikacji i zweryfikować konfiguracje Reguł bezpieczeństwa 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 zweryfikować reguły bezpieczeństwa Firebase w konsoli Firebase, użyj Symulatora reguł Firebase .