Catch up on everthing we announced at this year's Firebase Summit. Learn more

Unikaj niepewnych zasad

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 przy użyciu tej samej metody, konsekwentnie, 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 swoich przepisów z konsoli Firebase , wybierz swój projekt, a następnie przejdź do Realtime Database Cloud FireStore lub przechowywania. Kliknij Reguły raz jesteś we właściwym wiadra bazy danych lub pamięci masowej.

Aby uzyskać dostęp do swoich przepisów z Firebase CLI, przejdź do pliku rules zauważył w swoim 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 Cloud Storage w konsoli Firebase, można zdecydować się na zablokowanie dostępu do wszystkich użytkowników (tryb zablokowany) lub przyznać dostęp do wszystkich użytkowników (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.

Jak jesteś rozwija swoją aplikację i testując różne konfiguracje dla swoich zasad, jeden wykorzystanie lokalnych emulatorów Firebase uruchomić aplikację w środowisku rozwoju lokalnego.

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.

Nie zalecane: 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: Zasady, które ograniczają 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. Więcej informacji na temat uwierzytelniania użytkowników z przepisami .

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 jeden z twoich zasad obejmuje auth != null , potwierdzić, że chcesz każdy zalogowany użytkownik, aby mieć dostęp do danych.

Nie poleca: Każdy zalogowany użytkownik ma prawa odczytu i zapisu do 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 dojazd stosując warunki 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.

Nie zalecane: zasady rafinacji po ś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: zasady zapisu na ścieżkach macierzystych, które są szerokie, i przyznać bardziej konkretne przywileje na drogach podrzędnych Jeśli Twoje potrzeby dostępu do danych wymaga większej szczegółowości, zachować swoje zasady ziarnisty. Dowiedz się więcej o kaskadowe Realtime Rules baza w zabezpieczyć 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 cloud FireStore zasad bezpieczeństwa i jak one działają w Pierwsze kroki z chmurą FireStore zasad bezpieczeństwa .

Przetestuj swoje reguły bezpieczeństwa Cloud Firestore

Aby sprawdzić zachowanie aplikacji i zweryfikować swoje konfiguracje Chmura FireStore zasad bezpieczeństwa, użyj Firebase Emulator . Użyj emulatora Cloud Firestore, aby uruchamiać i automatyzować testy jednostkowe w środowisku lokalnym przed wdrożeniem jakichkolwiek zmian.

Aby szybko sprawdzić poprawność Firebase reguł ochrony w konsoli Firebase użyj Firebase Rules Simulator .