Napraw niezabezpieczone reguły

Ten przewodnik zawiera informacje o typowych lukach w zabezpieczeniach w regułach zabezpieczeń Cloud Firestore jak konfigurować i zabezpieczać własne reguły i testowanie zmian przed ich wdrożeniem.

Jeśli pojawi się alert informujący o tym, że baza danych Cloud Firestore nie jest prawidłowo zabezpieczona, możesz naprawić luki w zabezpieczeniach, modyfikując i testując Reguły zabezpieczeń Cloud Firestore.

Aby wyświetlić istniejące reguły zabezpieczeń, otwórz kartę Reguły w konsoli Firebase.

Omówienie reguł zabezpieczeń Cloud Firestore

Reguły zabezpieczeń Cloud Firestore chronią Twoje dane przed szkodliwymi użytkownikami. Domyślny dla dowolnej instancji Cloud Firestore utworzonej w konsoli Firebase odrzucają dostęp dla wszystkich użytkowników. Aby stworzyć aplikację i uzyskać dostęp do bazy danych, musisz zmodyfikować te reguły i rozważyć przyznanie dostępu ogólnego dla wszystkich użytkowników w środowisku programistycznym. Jednak zanim wdrożysz aplikację w środowisku produkcyjnym, jak skonfigurować reguły i zabezpieczyć dane.

W miarę rozwijania aplikacji i testowania różnych jej konfiguracji reguł, użyj emulatora Cloud Firestore, aby uruchomić aplikację w lokalnym środowisku programistycznym.

Typowe scenariusze korzystania z niezabezpieczonych reguł

reguły zabezpieczeń Cloud Firestore, które możesz skonfigurować domyślnie lub domyślnie; pracy nad tworzeniem aplikacji w Cloud Firestore należy sprawdzić i zaktualizować przed wdrożeniem aplikacji. Zadbaj o prawidłowe zabezpieczenie użytkowników dane dzięki unikaniu tych typowych pułapek.

Otwarty dostęp

Podczas konfigurowania Cloud Firestore być może Twoje reguły zezwalają na otwarty dostęp podczas programowania. Możesz pomyśleć, że jesteś jedyną osobą, która korzysta z ale jeśli została wdrożona, jest dostępna w internecie. Jeśli nie jesteś uwierzytelnianie użytkowników i konfigurowanie reguł zabezpieczeń, a potem każdy, kto zgadnie identyfikator projektu może ukraść, zmodyfikować lub usunąć dane.

Niezalecane: dostęp do wszystkich z możliwością odczytu i zapisu użytkowników.
// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this rule set in production; it allows
// anyone to overwrite your entire database.

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}
Rozwiązanie: reguły, które ograniczają odczyt uprawnień do zapisu.

Twórz reguły, które mają sens w przypadku Twojej hierarchii danych. Jednym z typowych rozwiązań do tego zabezpieczenia są oparte na użytkownikach. Więcej informacji o uwierzytelniania użytkowników za pomocą reguł.

Tylko właściciel treści

service cloud.firestore {
  match /databases/{database}/documents {
    // Allow only authenticated content owners access
    match /some_collection/{document} {
      allow read, write: if request.auth != null && request.auth.uid == request.resource.data.author_uid
    }
  }
}
  

Dostęp publiczny i prywatny

service cloud.firestore {
  match /databases/{database}/documents {
    // Allow public read access, but only content owners can write
    match /some_collection/{document} {
      allow read: if true
      allow write: if request.auth != null && request.auth.uid == request.resource.data.author_uid
    }
  }
}
  

Dostęp dla każdego uwierzytelnionego użytkownika

Czasami reguły zabezpieczeń Cloud Firestore sprawdzają, czy użytkownik jest zalogowany, ale nie wykonują dalszych czynności ogranicza dostęp na podstawie tego uwierzytelniania. Jeśli jedna z reguł zawiera ciąg auth != null, potwierdź, że chcesz, aby każdy zalogowany użytkownik miał dostęp do i skalowalnych danych.

Niezalecane: każdy zalogowany użytkownik przeczytał i uprawnienia do zapisu całej bazy danych.
service cloud.firestore {
  match /databases/{database}/documents {
    match /some_collection/{document} {
      allow read, write: if request.auth != null;
    }
  }
}
Rozwiązanie: ograniczenie dostępu za pomocą zabezpieczeń conditions.

Przy sprawdzaniu uwierzytelniania możesz też używać go właściwości uwierzytelniania, aby jeszcze bardziej ograniczyć dostęp do konkretnych użytkowników dla konkretnych zbiorów danych. Więcej informacji o dodanie warunków zabezpieczeń oraz dostęp na podstawie roli.

Dostęp na podstawie ról

service cloud.firestore {
  match /databases/{database}/documents {
    // Assign roles to all users and refine access based on user roles
    match /some_collection/{document} {
     allow read: if request.auth != null && get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Reader"
     allow write: if request.auth != null && get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Writer"

     // Note: Checking for roles in your database using `get` (as in the code
     // above) or `exists` carry standard charges for read operations.
    }
  }
}

Dostęp na podstawie atrybutów

// Give each user in your database a particular attribute
// and set it to true/false
// Then, use that attribute to grant access to subsets of data
// For example, an "admin" attribute set
// to "true" grants write access to data

service cloud.firestore {
  match /databases/{database}/documents {
    match /collection/{document} {
      allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true;
      allow read: true;
    }
  }
}
  

Dostęp publiczny i prywatny

service cloud.firestore {
  match /databases/{database}/documents {
    // Allow public read access, but only content owners can write
    match /some_collection/{document} {
      allow read: if true
      allow write: if request.auth.uid == request.resource.data.author_uid
    }
  }
}
  

Zamknięty dostęp

Podczas tworzenia aplikacji możesz też zadbać o to, aby Twoja aplikacja i blokad danych. Zwykle oznacza to, że odczyt i zapis są wyłączone dostęp dla wszystkich użytkowników w następujący sposób:

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

Pakiety Firebase Admin SDK i Cloud Functions nadal mają dostęp do w bazie danych. Użyj tych reguł, jeśli chcesz używać Cloud Firestore tylko na serwerze w połączeniu z Firebase Admin SDK. Chociaż jest to bezpieczne, musisz sprawdzić, czy klienty aplikacji mogą jak prawidłowo pobrać dane.

Dowiedz się więcej o regułach zabezpieczeń Cloud Firestore i o tym, jak działają Pierwsze kroki z regułami zabezpieczeń Cloud Firestore

Sprawdzanie reguł zabezpieczeń Cloud Firestore

Aby sprawdzić działanie aplikacji i zweryfikować konfiguracje reguł zabezpieczeń Cloud Firestore, użyć emulatora Cloud Firestore. Korzystanie z Cloud Firestore emulatorowi do uruchamiania i automatyzacji testów jednostkowych w środowisku lokalnym przed wdrożeniem. żadnych zmian.

Aby szybko przetestować zaktualizowane reguły zabezpieczeń Cloud Firestore w konsoli Firebase, w narzędziu Playground opartym na regułach.

  1. Aby otworzyć Playground reguł, kliknij Plac reguł w Karta Reguły.
  2. W ustawieniach Narzędzia do testowania reguł wybierz opcje testu, w tym:
    • Testowanie odczytów lub zapisów
    • określona lokalizacja w bazie danych jako ścieżka;
    • Typ uwierzytelniania – nieuwierzytelniony, uwierzytelniony anonimowy użytkownik lub określony identyfikator użytkownika
    • dane dotyczące dokumentu, do których odwołują się reguły (na Jeśli na przykład reguły wymagają obecności określonego pola przed umożliwienia zapisu)
  3. Kliknij Uruchom i sprawdź wyniki na banerze nad oknem reguł.