Lista kontrolna zabezpieczeń Firebase

Aby zachować zasoby Firebase i użytkowników aby zapewnić bezpieczeństwo danych, wytycznymi. Nie każdy produkt musi być zgodny z Twoimi wymaganiami, ale pamiętaj o nich podczas tworzenia aplikacji.

Unikanie nieodpowiedniego ruchu

Skonfiguruj monitorowanie i alerty dla usług backendu

Aby wykrywać nieodpowiedni ruch, np. ataki typu DoS, skonfiguruj monitorowanie i alerty dotyczące Cloud Firestore, Realtime Database, Cloud Storage oraz Hosting

Jeśli podejrzewasz atak na aplikację, skontaktuj się z zespołem pomocy tak szybko, jak to możliwe, i poinformować ich, co się dzieje.

Włącz App Check

Aby mieć pewność, że tylko aplikacje mają dostęp do usług backendu, włącz Firebase App Check w przypadku każdej usługi, która ją obsługuje.

Skonfiguruj Cloud Functions, aby skalować dla normalnego ruchu

Cloud Functions automatycznie skaluje się zgodnie z potrzebami aplikacji, ale ataku, może to oznaczać wysoki rachunek. Aby temu zapobiec, możesz: ogranicz liczbę równoczesnych instancji funkcji na podstawie normalnego ruchu w aplikacji.

Skonfiguruj alerty, aby otrzymywać powiadomienia, gdy limit jest bliski osiągnięcia limitu

Jeśli w usłudze występują gwałtowne skoki liczby żądań, często zaczną obowiązywać limity. możesz ograniczyć ruch do swojej aplikacji. Pamiętaj, aby regularnie kontrolować Panel użytkowania i płatności, ale możesz też skonfiguruj alerty dotyczące budżetu w projekcie, aby otrzymywać powiadomienia, gdy wykorzystanie zasobów przekroczy oczekiwania.

Zapobiegaj auto-DOS: testuj funkcje lokalnie za pomocą emulatorów

Podczas tworzenia aplikacji można łatwo przypadkowo DOS Cloud Functions: na przykład przez utworzenie nieskończonej pętli aktywatora i zapisu. Możesz zapobiec tym błędom wpływającemu na działanie usług, wykonując za pomocą Firebase Local Emulator Suite.

A jeśli przypadkowo dokonasz DoS-u samodzielnie, wycofaj swoją funkcję, usuwając ją od index.js, a następnie uruchomiony firebase deploy --only functions

Jeśli responsywność w czasie rzeczywistym jest mniej ważna, zaprojektuj strukturę obronną

Jeśli nie musisz prezentować wyniku funkcji w czasie rzeczywistym, aby ograniczyć nieprawidłowy ruch, przetwarzając wyniki partiami: opublikuj wyników do Pub/Sub i przetwarzaj wyniki w regularnych odstępach czasu z użyciem funkcji zaplanowanej.

Informacje o kluczach interfejsu API

Klucze interfejsu API usług Firebase nie są tajne

Firebase używa kluczy interfejsu API tylko do identyfikowania projektu Firebase aplikacji w Firebase usług i nie kontrolować dostępu do bazy danych lub danych Cloud Storage, które są ukończono przy użyciu Firebase Security Rules. Dlatego nie musisz: traktować klucze interfejsu API usług Firebase jako obiekty tajne w kodzie klienta. Więcej informacji o Klucze interfejsu API dla Firebase.

Konfigurowanie ograniczeń klucza interfejsu API

Jest to dodatkowe zabezpieczenie przed próbą użycia Twojego klucza interfejsu API do sfałszowanych próśb, możesz dodać Ograniczenia klucza interfejsu API zakresu kluczy API do klientów aplikacji i interfejsów API, których używasz.

Nie ujawniaj FCM kluczy serwera

W przeciwieństwie do kluczy interfejsu API dla usług Firebase, FCM klucza serwera (używanego przez starsza wersja interfejsu API HTTP FCM) poufne i nie należy ich ujawniać.

Nie ujawniaj kluczy konta usługi

W przeciwieństwie do kluczy interfejsu API dla usług Firebase klucze prywatne konta usługi (używane przez Firebase Admin SDK) poufne i nie należy go ujawniać.

Firebase Security Rules

Inicjowanie reguł w trybie produkcyjnym lub trybie blokady

Po skonfigurowaniu funkcji Cloud Firestore, Realtime Database i Cloud Storage zainicjuj reguły zabezpieczeń, aby domyślnie odrzucać cały dostęp, oraz dodać reguły, które przyznają dostęp podczas tworzenia aplikacji.

Użyj jednego z ustawień domyślnych dla nowych instancji Cloud Firestore (produkcyjnych tryb) i Realtime Database (tryb blokady). W przypadku aplikacji Cloud Storage zacznij od zabezpieczenia konfigurację reguł w następujący sposób:

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if false;
    }
  }
}

Reguły zabezpieczeń to schemat. dodawanie reguł podczas dodawania dokumentów

Nie twórz reguł zabezpieczeń po napisaniu aplikacji – nie należy robić tego przed jej opublikowaniem. zadanie. Zamiast tego twórz reguły zabezpieczeń podczas pisania aplikacji, traktując je jak schematu bazy danych: za każdym razem, gdy trzeba użyć nowego typu dokumentu lub struktury ścieżki, zapisze ją najpierw.

Reguły zabezpieczeń do testowania jednostkowego z zastosowaniem Local Emulator Suite; Dodaj do CI

Aby mieć pewność, że reguły zabezpieczeń są zgodne z rozwojem aplikacji, do testowania reguł. Firebase Local Emulator Suite i dodaj te testy do potoku CI. Zobacz te przewodniki: Cloud Firestore i Realtime Database.

Uwierzytelnianie

Uwierzytelnianie niestandardowe: tworzenie tokenów JWT z zaufanego środowiska (po stronie serwera)

Jeśli masz już bezpieczny system logowania, zarówno niestandardowy, jak i innej firmy, możesz użyć swojego istniejącego systemu, aby uwierzytelnić się za pomocą Usługi Firebase. Tworzenie niestandardowych tokenów JWT z zaufanego środowiska, a potem przekazać tokeny klientowi, który używa token do uwierzytelnienia (iOS+, Android, internet, Unity, C++).

Przykład użycia niestandardowego uwierzytelniania z zewnętrznym dostawcą znajdziesz tutaj post na blogu, Uwierzytelnij się w Firebase za pomocą Okta.

Uwierzytelnianie zarządzane: najbezpieczniejsze są dostawcy OAuth 2.0

Jeśli korzystasz z funkcji uwierzytelniania zarządzanego Firebase, protokół OAuth 2.0 lub OpenID Opcje dostawców (Google, Facebook itp.) są najbardziej bezpieczne. Ty powinna obsługiwać co najmniej jednego z tych dostawców (w zależności od podstawy).

Uwierzytelnianie przy użyciu hasła e-mail: ustaw wąski limit dla punktu końcowego logowania, aby zapobiec atakom typu brute-force

Jeśli korzystasz z zarządzanej usługi uwierzytelniania przez e-maila za pomocą hasła Firebase, zwiększ domyślny limit punktów końcowych identitytoolkit.googleapis.com, aby zapobiec atakom brute ataki siłowe. Aby to zrobić, otwórz stronę Strona Identity Toolkit API w konsoli Google Cloud.

Uwierzytelnianie e-mail-hasło: włącz ochronę wyliczania e-maili

Jeśli korzystasz z zarządzanej usługi uwierzytelniania adresu e-mail za pomocą hasła Firebase, włączyć ochronę przed wyliczeniem adresów e-mail, Uniemożliwia szkodliwym podmiotom nadużywanie punktów końcowych uwierzytelniania projektu zgadywać nazwy kont.

Aby korzystać z uwierzytelniania wielopoziomowego, przejdź na Google Cloud Identity Platform

Aby zwiększyć bezpieczeństwo logowania, możesz dodać obsługę uwierzytelniania wielopoziomowego przechodząc na Google Cloud Identity Platform. Po przejściu na wyższą wersję Twój obecny kod Firebase Authentication będzie nadal działać.

Uwierzytelnianie anonimowe

Używanie anonimowego uwierzytelniania tylko do wdrażania z wprowadzeniem

Używaj uwierzytelniania anonimowego tylko do zapisania podstawowego stanu użytkowników, zanim zalogować się na konto. Anonimowe uwierzytelnianie nie zastępuje użytkowników dane logowania.

Przekształć użytkowników w inną metodę logowania, jeśli będą chcieli, by ich dane były przechowywane na innych urządzeniach

Anonimowe dane uwierzytelniania nie zostaną zachowane, jeśli użytkownik wyczyści dane lokalne pamięci masowej lub przełączać urządzenia. Jeśli musisz zachowywać dane poza ponownym uruchomieniem aplikacji na jednym urządzeniu, przekształcić użytkownika w konto stałe.

używać reguł zabezpieczeń, które wymagają od użytkowników przejścia na dostawcę logowania lub zweryfikowania adresu e-mail;

Każdy może utworzyć anonimowe konto w Twoim projekcie. Mając to na uwadze, chronić wszystkie niepubliczne dane za pomocą reguł zabezpieczeń, które wymagają określonych metod logowania lub zweryfikowanych adresów e-mail.

Przykład:

allow write: if request.auth.token.firebase.sign_in_provider != "anonymous";
allow write: if request.auth.token.email_verified = true;

Cloud Functions: zagranie bezpieczne

Nigdy nie umieszczaj informacji poufnych w zmiennych środowiskowych

Często w własnych aplikacjach Node.js zmienne środowiskowe do przechowywania informacji poufnych, takich jak klucze prywatne. Nie rób tego w aplikacji Cloud Functions. Ponieważ Cloud Functions wykorzystuje ponownie między wywołaniami funkcji informacje poufne nie powinny być przechowywane w środowisku.

  • Aby przechowywać klucze interfejsu API Firebase (które nie są tajne): po prostu umieścić w kodzie.

  • Jeśli Cloud Functions zawiera Firebase Admin SDK, nie musisz jednoznacznie podać dane logowania do konta usługi, bo Admin SDK mogą automatycznie pozyskiwać je podczas inicjowania.

  • Jeśli wywołujesz interfejsy API Google i Google Cloud, które wymagają konta usługi biblioteka uwierzytelniania Google dla Node.js może pobrać te dane logowania z domyślne dane logowania aplikacji, które są automatycznie wypełniane w Cloud Functions.

  • Aby udostępnić klucze prywatne i dane logowania do usług firm innych niż Google na Cloud Functions, użyj Secret Manager

Szyfruj informacje poufne

Jeśli nie możesz uniknąć przekazywania informacji poufnych do funkcji, musisz wymyślić własne rozwiązanie do szyfrowania informacji.

Proste funkcje są bezpieczniejsze, Jeśli zależy Ci na złożoności, rozważ Cloud Run

Postaraj się, aby funkcje były jak najbardziej podstawowe i zrozumiałe. Złożoność mogą często prowadzić do łatwych do zauważenia błędów lub nieoczekiwanego działania.

Jeśli potrzebujesz złożonych konfiguracji logicznych lub środowisk, rozważ użycie Cloud Run zamiast Cloud Functions

Zarządzanie środowiskiem

Konfigurowanie projektów programistycznych i testowych

Skonfiguruj osobne projekty Firebase na potrzeby programowania, testowania i produkcji. Nie scalaj kodu klienta z wersją produkcyjną, dopóki nie zostanie on przetestowany w wersji testowej w projektach AI.

Ograniczanie dostępu zespołu do danych produkcyjnych

Jeśli współpracujesz z większym zespołem, możesz ograniczyć konsekwencje błędów i naruszeniach zabezpieczeń przez ograniczenie dostępu do danych produkcyjnych za pomocą wstępnie zdefiniowanych ról uprawnień lub niestandardowych ról uprawnień.

Jeśli Twój zespół używa Firebase Local Emulator Suite (zalecane) na potrzeby programowania, przyznawanie szerszego dostępu do funkcji w projekcie produkcyjnym.

Zarządzanie biblioteką

Uważaj na błędy w bibliotece i nowych pomocników

Dodając biblioteki do projektu, zwróć szczególną uwagę na nazwę biblioteki i jej opiekunami. Biblioteka o nazwie podobnej do tej, której chcesz używać instalacja może zawierać złośliwy kod.

Nie aktualizuj bibliotek bez zrozumienia zmian

Przed przejściem na wyższą wersję przejrzyj logi zmian używanych przez Ciebie bibliotek. Upewnij się, że uaktualnienie jest wartościowe, a opieka jest w dalszym ciągu Twoją organizacją. zaufania.

Instalowanie bibliotek watchdog jako wersji deweloperskiej lub testowania zależności

Użyj biblioteki takiej jak Snyk, aby przeskanować projekt. dla niezabezpieczonych zależności.

Skonfiguruj monitorowanie dla: Cloud Functions. sprawdź to po aktualizacji biblioteki

Jeśli używasz tagu pakiet SDK Rejestratora Cloud Functions, a potem możesz monitoruj i otrzymuj alerty nietypowego działania, w tym również spowodowane aktualizacjami biblioteki;