Google 致力于为黑人社区推动种族平等。查看具体举措

Lista kontrolna zabezpieczeń Firebase

Aby zapewnić bezpieczeństwo zasobów Firebase i danych użytkowników, postępuj zgodnie z tymi wskazówkami. Nie każdy element będzie pasował do Twoich wymagań, ale pamiętaj o nich podczas tworzenia aplikacji.

Unikaj nadużyć ruchu

Skonfiguruj monitorowanie i alerty dla usług zaplecza

Do wykrywania nadużyć ruchu, takich jak (DOS) atakami Denial of-Service, utworzonych monitorowania i alarmowania o chmurze FireStore , Realtime Database , Cloud Storage i Hosting

Jeśli podejrzewasz, że atak na aplikacji, dotrzeć do wsparcia jak najszybciej do niech wiedzą, co się dzieje.

Włącz sprawdzanie aplikacji

Aby zapewnić tylko aplikacje mogą uzyskać dostęp do usługi zaplecza, umożliwiają aplikacji Check dla każdej usługi, która ją obsługuje.

Skonfiguruj Cloud Functions do skalowania dla normalnego ruchu

Cloud Functions automatycznie skaluje się do wymagań Twojej aplikacji, ale w przypadku ataku może to oznaczać duży rachunek. Aby temu zapobiec, można ograniczyć liczbę jednoczesnych wystąpień z funkcji opartych na normalnym ruchu dla aplikacji.

Skonfiguruj alerty, aby otrzymywać powiadomienia, gdy limity zostaną prawie osiągnięte

Jeśli Twoja usługa ma skoki żądań, często uruchamiają się limity i automatycznie ograniczają ruch do Twojej aplikacji. Upewnij się, aby monitorować Wykorzystanie i deski rozdzielczej rozliczeniowe , ale można również ustawić powiadomienia budżetowych nad projektem mają być powiadomiony kiedy wykorzystanie zasobów jest powyżej oczekiwań.

Zapobiegaj autodosom: testuj funkcje lokalnie za pomocą emulatorów

Przypadkowy DOS może być łatwy podczas opracowywania Cloud Functions: na przykład tworząc nieskończoną pętlę zapisu wyzwalacza. Można uniknąć tych błędów od wpływu usług na żywo, wykonując swój rozwój z emulatora pakietu Firebase .

(A jeśli nie przypadkowo DOS samodzielnie, undeploy swojej funkcji przez usunięcie go z index.js następnie systemem firebase deploy --only functions ).

Tam, gdzie responsywność w czasie rzeczywistym jest mniej ważna, struktura działa defensywnie

Jeśli nie trzeba przedstawiać wynik funkcji w czasie rzeczywistym, można złagodzić przeciwko nadużycia ruchu poprzez przetwarzanie wyników w seriach: publikuje wyniki do Pub / Sub temacie i przetwarzania wyników w regularnych odstępach czasu z planowaną funkcją .

Zrozum klucze API

Klucze API dla usług Firebase nie są tajne

Firebase klucze API zastosowania wyłącznie w celu identyfikacji projektu Firebase swojej aplikacji do usług Firebase, a nie w celu kontroli dostępu do bazy danych lub danych w chmurze, która jest wykonywana przy użyciu Firebase Reguły zabezpieczeń . Z tego powodu nie musisz traktować kluczy API dla usług Firebase jako tajnych i możesz bezpiecznie osadzić je w kodzie klienta. Dowiedz się więcej o klucze API dla Firebase .

Skonfiguruj zakres klucza API

Jako dodatkowy środek odstraszający wobec atakującego próby użycia klucza API sfałszować wniosków, można utworzyć klucze API zawężona do klientów aplikacji .

Zachowaj klucze serwera FCM w tajemnicy

W przeciwieństwie klucze API dla usług Firebase, klucze serwerów FCM (używany przez spuścizny FCM HTTP API ) wrażliwe i muszą być utrzymywane w tajemnicy.

Zachowaj klucze konta usługi w tajemnicy

Również w przeciwieństwie klucze API dla usług Firebase, serwis stanowią klucze prywatne (używane przez Admin SDK ) wrażliwe i muszą być utrzymywane w tajemnicy.

Zasady bezpieczeństwa

Zainicjuj reguły w trybie produkcyjnym lub zablokowanym

Podczas konfigurowania Cloud Firestore, Bazy danych czasu rzeczywistego i Cloud Storage zainicjuj reguły zabezpieczeń, aby domyślnie odmawiać dostępu, i dodaj reguły, które przyznają dostęp do określonych zasobów podczas tworzenia aplikacji.

To jedno z domyślnych ustawień dla nowych instancji Cloud Firestore (tryb produkcyjny) i Baza danych czasu rzeczywistego (tryb zablokowany). Wybierz tę opcję podczas konfigurowania nowej instancji bazy danych.

W przypadku Cloud Storage zacznij od konfiguracji reguł bezpieczeństwa, jak poniżej:

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

Reguły bezpieczeństwa to schemat; dodaj reguły podczas dodawania dokumentów

Nie pisz reguł zabezpieczeń po napisaniu aplikacji, co jest rodzajem zadania przed uruchomieniem. Zamiast tego pisz reguły zabezpieczeń podczas pisania aplikacji, traktując je jak schemat bazy danych: zawsze, gdy musisz użyć nowego typu dokumentu lub struktury ścieżki, najpierw napisz regułę zabezpieczeń.

Reguły bezpieczeństwa testów jednostkowych z pakietem emulatorów; dodaj to do CI

Aby upewnić się, że przepisy bezpieczeństwa są nadąża za rozwojem Twojej aplikacji, testów jednostkowych Twoje zasady z emulatora pakietu Firebase i dodać te testy do rurociągu CI. Zobacz te przewodniki dla chmurze FireStore i Realtime Database .

Uwierzytelnianie

Uwierzytelnianie niestandardowe: mint tokeny JWT z zaufanego środowiska (po stronie serwera)

Jeśli masz już bezpieczny system logowania, niezależnie od tego, czy jest to system niestandardowy, czy usługa innej firmy, możesz użyć istniejącego systemu do uwierzytelniania w usługach Firebase. Tworzenie niestandardowych JWTs z zaufanego środowiska, a następnie przekazać te tokeny do klienta, który korzysta token do uwierzytelniania ( iOS , Android , WWW , Unity , C ++ ).

Na przykład przy użyciu uwierzytelniania niestandardowego z dostawcą trzeciej, zobacz blogu, uwierzytelnić Firebase użyciu OKTA .

Uwierzytelnianie zarządzane: dostawcy OAuth 2.0 są najbezpieczniejsi

Jeśli korzystasz z zarządzanych funkcji uwierzytelniania Firebase, opcje dostawcy OAuth 2.0 / OpenID Connect (Google, Facebook itp.) są najbezpieczniejsze. Jeśli to możliwe, powinieneś wspierać jednego lub więcej z tych dostawców (w zależności od bazy użytkowników).

Uwierzytelnianie za pomocą hasła e-mail: ustaw ścisły limit dla punktu końcowego logowania, aby zapobiec atakom typu brute force

Jeśli używasz zarządzanego-mail hasło usługi uwierzytelniania Firebase za dokręcić domyślną kwotę z identitytoolkit.googleapis.com punktami końcowymi, aby zapobiec atak brute force. Można to zrobić od strony interfejsu API w konsoli Google Cloud .

Przejdź na Cloud Identity Platform, aby korzystać z uwierzytelniania wieloskładnikowego

Dla dodatkowego bezpieczeństwa na logowanie, można dodać obsługę uwierzytelniania wieloczynnikowej przez uaktualnienie do cloud Identity Platformy . Twój dotychczasowy kod uwierzytelniania Firebase będzie nadal działał po uaktualnieniu.

Uwierzytelnianie anonimowe

Używaj tylko anonimowego uwierzytelniania do ciepłego onboardingu

Używaj tylko uwierzytelniania anonimowego, aby zapisać podstawowy stan użytkowników przed faktycznym zalogowaniem się. Uwierzytelnianie anonimowe nie zastępuje logowania użytkownika.

Przekonwertuj użytkowników na inną metodę logowania, jeśli będą potrzebować danych po utracie telefonu

Dane uwierzytelniania anonimowego nie zostaną zachowane, jeśli użytkownik wyczyści magazyn lokalny lub przełączy urządzenia. Jeśli trzeba utrzymywać dane poza ponownym uruchomieniu aplikacji na jednym urządzeniu, konwertować użytkownikowi stałego konta .

Użyj reguł bezpieczeństwa, które wymagają od użytkowników przejścia na dostawcę logowania lub zweryfikowania swojego adresu e-mail

Każdy może utworzyć anonimowe konto w Twoim projekcie. Mając to na uwadze, chronić wszystkie dane niepublicznych z zasadami bezpieczeństwa, które wymagają specyficznego logowania metod lub zweryfikowanych adresów e-mail .

Na przykład:

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

Zarządzanie środowiskiem

Skonfiguruj projekty deweloperskie i postojowe

Skonfiguruj oddzielne projekty Firebase na potrzeby programowania, testowania i produkcji. Nie scalaj kodu klienta z produkcją, dopóki nie zostanie przetestowany pod kątem projektu tymczasowego.

Ogranicz dostęp zespołu do danych produkcyjnych

Jeśli pracujesz z większym zespole, można złagodzić skutki błędów i naruszeń poprzez ograniczenie dostępu do danych produkcyjnych z zastosowaniem zarówno predefiniowane role lub niestandardowe role IAM.

Jeśli Twój zespół używa pakietu emulatorów do programowania, może nie być konieczne przyznawanie szerszego dostępu do projektu produkcyjnego.

Zarządzanie biblioteką

Uważaj na błędy ortograficzne w bibliotece lub nowych opiekunów

Dodając biblioteki do swojego projektu, zwróć szczególną uwagę na nazwę biblioteki i jej opiekunów. Biblioteka o podobnej nazwie do tej, którą zamierzasz zainstalować, może zawierać złośliwy kod.

Nie aktualizuj bibliotek bez zrozumienia zmian

Przejrzyj dzienniki zmian wszystkich używanych bibliotek przed aktualizacją. Upewnij się, że aktualizacja dodaje wartości i upewnij się, że opiekun jest nadal stroną, której ufasz.

Zainstaluj biblioteki watchdog jako zależności deweloperskie lub testowe

Użyj biblioteki takie jak Snyk zeskanować swój projekt dla niepewnych zależności.

Skonfiguruj monitorowanie funkcji; sprawdź to po aktualizacji biblioteki

Jeśli korzystasz z pakietu SDK Chmura Funkcje rejestratora , można monitorować i być powiadamiani o nietypowym zachowaniu, w tym zachowania spowodowane aktualizacjach bibliotecznych.

Bezpieczeństwo funkcji chmury

Nigdy nie umieszczaj poufnych informacji w zmiennych środowiskowych Cloud Function

Często w samoobsługowej aplikacji Node.js używasz zmiennych środowiskowych do przechowywania poufnych informacji, takich jak klucze prywatne. Nie rób tego w funkcji Cloud. Ponieważ Cloud Functions ponownie używa środowisk między wywołaniami funkcji, poufne informacje nie powinny być przechowywane w środowisku.

  • Aby zapisać Firebase klucze API, które są nie tajemnica , po prostu umieścić je w kodzie.
  • Jeśli używasz pakietu Firebase Admin SDK w funkcji Cloud Functions, nie musisz jawnie podawać danych logowania do konta usługi, ponieważ pakiet SDK może je automatycznie uzyskać podczas inicjowania.
  • Jeśli dzwonisz API Google i Google Cloud, które wymagają poświadczenia konta usługa, biblioteki Google Auth dla node.js można uzyskać tych poświadczeń od poświadczeń domyślnych aplikacji , które są wypełniane automatycznie w funkcji Cloud.
  • Aby kluczy prywatnych i poświadczenia dla usług innych firm dostępnych do funkcji Chmura, używać Chmura Tajny Menedżer .

Szyfruj poufne informacje

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

Proste funkcje są bezpieczniejsze; jeśli potrzebujesz złożoności, rozważ Cloud Run

Staraj się, aby funkcje Cloud Functions były tak proste i zrozumiałe, jak to tylko możliwe. Złożoność funkcji może często prowadzić do trudnych do wykrycia błędów lub nieoczekiwanego zachowania.

Jeśli musisz złożone konfiguracje logicznych lub środowisko, należy rozważyć użycie Chmura Uruchom zamiast funkcji Cloud.