Omówienie reguł zabezpieczeń Bazy danych czasu rzeczywistego Firebase

Reguły zabezpieczeń Bazy danych czasu rzeczywistego Firebase określają, kto ma uprawnienia do odczytu i zapisu w bazy danych, struktury danych i istniejących indeksów. Te reguły są aktywne na serwerach Firebase i są przez cały czas egzekwowane automatycznie. Wszystkie przeczytane i żądanie zapisu zostanie zrealizowane tylko wtedy, gdy zezwalają na to reguły. Domyślnie Twoje reguły nie zezwalają każdemu na dostęp do Twojej bazy danych. Ma to na celu ochronę do ochrony bazy danych przed nadużyciami do czasu, aż zdążysz dostosować reguły uwierzytelnianie.

Reguły zabezpieczeń Bazy danych czasu rzeczywistego mają składnię podobną do JavaScript i występują w 4 typach:

Typy reguł
.read, Określa, czy i kiedy użytkownicy mogą odczytywać dane.
.write, Określa, czy i kiedy można zapisywać dane.
.validate, Określa, jak będzie wyglądać prawidłowo sformatowana wartość atrybut podrzędny oraz typ danych.
.indexOn Określa element podrzędny do indeksowania w celu obsługi sortowania i zapytań.

Przegląd zabezpieczeń Realtime Database

Firebase Realtime Database zapewnia pełny zestaw narzędzi do zarządzania zabezpieczeń aplikacji. Narzędzia te ułatwiają uwierzytelnianie użytkowników, wymuszać uprawnienia użytkowników i weryfikować dane wejściowe.

Aplikacje oparte na Firebase uruchamiają więcej kodu po stronie klienta niż aplikacje, które korzystają z wielu innych stosy technologiczne. Dlatego nasze podejście do bezpieczeństwa może być w inny sposób niż zwykle.

Uwierzytelnianie

Pierwszym krokiem do zabezpieczenia aplikacji jest identyfikować użytkowników. Ten proces jest nazywany uwierzytelnianiem. możesz używać Uwierzytelniania Firebase. zachęcania użytkowników do logowania się w Twojej aplikacji. Uwierzytelnianie Firebase umożliwia bezpośrednią obsługę popularnych metod uwierzytelniania, takich jak Google Facebooka, a także logowanie się za pomocą adresu e-mail i hasła, logowanie anonimowe i inne.

Tożsamość użytkownika to ważna koncepcja bezpieczeństwa. Różni użytkownicy mają różne a czasem mają inne możliwości. Na przykład na czacie w aplikacji, każda wiadomość jest powiązana z użytkownikiem, który ją utworzył. Użytkownicy mogą mieć możliwość usuwania własnych wiadomości, ale nie wiadomości publikowanych przez innych użytkowników.

Autoryzacja

Identyfikacja użytkownika stanowi tylko część zapewniania bezpieczeństwa. Wiedząc, kim są, potrzebują sposobu na kontrolowanie ich dostępu do danych w Twojej bazie danych. Reguły zabezpieczeń Bazy danych czasu rzeczywistego umożliwiają kontrolowanie dostępu poszczególnych użytkowników. Oto przykładowy zestaw reguły zabezpieczeń, które pozwalają każdemu na odczytywanie ścieżki /foo/, ale nie wpisz w nim jeden z nich:

{
  "rules": {
    "foo": {
      ".read": true,
      ".write": false
    }
  }
}

Reguły .read i .write są kaskadowe, więc ten zestaw reguł przyznaje dostęp w trybie odczytu do dowolnych danych na ścieżce /foo/ oraz do kolejnych ścieżek, na przykład /foo/bar/baz. Pamiętaj, że .read i Reguły .write niższego poziomu w bazie danych zastępują głębsze reguły, więc uprawnienia do odczytu zasobu /foo/bar/baz są nadal przyznawane w tym przykładzie nawet jeśli reguła w ścieżce /foo/bar/baz została uznana za fałsz.

Reguły zabezpieczeń Bazy danych czasu rzeczywistego obejmują zmienne wbudowane i funkcje, które umożliwiają aby odwoływać się do innych ścieżek, sygnatur czasowych po stronie serwera, informacji uwierzytelniających i inne. Oto przykład reguły, która przyznaje uwierzytelnionym użytkownikom dostęp do zasobu /users/<uid>/. W tym przypadku parametr <uid> to identyfikator użytkownika uzyskany za pomocą funkcji Firebase Authentication.

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}

Walidacja danych

Element Firebase Realtime Database nie ma schematu. Ułatwia to wprowadzanie zmian podczas tworzenia, ale gdy aplikacja jest gotowa do dystrybucji, ważne jest, dane, aby zachować spójność. Język reguł zawiera regułę .validate, która umożliwia zastosowanie logiki walidacji za pomocą tych samych wyrażeń, które są używane w regułach .read i .write. Jedyna różnica to: że reguły weryfikacji nie działają kaskadowo, więc wszystkie istotne Aby zapis był dozwolony, reguły weryfikacji muszą mieć wartość prawda.

Ta reguła wymusza, aby dane zapisywane w /foo/ muszą być ciągiem znaków mniej niż 100 znaków:

{
  "rules": {
    "foo": {
      ".validate": "newData.isString() && newData.val().length < 100"
    }
  }
}

Reguły weryfikacji mają dostęp do wszystkich wbudowanych funkcji jako reguły .read i .write. Za pomocą w celu utworzenia reguł weryfikacji, które uwzględniają dane w innych częściach informacje o tożsamości użytkowników, czasie pracy na serwerze i wiele innych danych.

Definiowanie indeksów baz danych

Firebase Realtime Database umożliwia sortowanie i wysyłanie zapytań dotyczących danych. Małe dane baza danych obsługuje zapytania doraźne, więc indeksy zwykle nie są wymaganych podczas programowania. Zanim ją wprowadzisz, aby określić indeksy dla wszystkich zapytań, aby zapewnić, że będą one nadal działać aby Twoja aplikacja się rozwijała.

Indeksy określa się za pomocą reguły .indexOn. Oto przykład deklaracji indeksu, która indeksuje pola height i length w przypadku listy dinozaurów:

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}

Dalsze kroki