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 JavaScriptu 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ć poprawnie sformatowana wartość, czy ma atrybuty podrzędne, a także typ danych.
indexOn, Określa element podrzędny do indeksowania w celu obsługi sortowania i zapytań.

Realtime Database omówienie zabezpieczeń

Firebase Realtime Database udostępnia pełny zestaw narzędzi do zarządzania bezpieczeństwem aplikacji. Dzięki tym narzędziom możesz łatwo uwierzytelniać użytkowników, egzekwować ich uprawnienia i weryfikować dane wejściowe.

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

Uwierzytelnianie

Pierwszym krokiem w zabezpieczeniu aplikacji jest zwykle identyfikacja 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 w aplikacji do czatu każda wiadomość jest powiązana z użytkownikiem, który ją utworzył. Użytkownicy mogą też usuwać własne wiadomości, ale nie wiadomości opublikowane przez innych użytkowników.

Autoryzacja

Identyfikacja użytkownika stanowi tylko część zapewniania bezpieczeństwa. Gdy już je poznasz, musisz mieć możliwość kontrolowania ich dostępu do danych w Twojej bazie danych. Reguły zabezpieczeń bazy danych czasu rzeczywistego pozwalają kontrolować dostęp każdego użytkownika. Oto na przykład zestaw reguł zabezpieczeń, który zezwala każdemu na odczyt ścieżki /foo/, ale nie zezwala na zapisywanie w niej:

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

Reguły .read.write działają kaskadowo, więc ten zestaw zasad przyznaje dostęp z możliwością odczytu do wszystkich danych na ścieżce /foo/, a także do wszystkich ścieżek głębszych, takich jak /foo/bar/baz. Pamiętaj, że reguły .read i .write znajdujące się wyżej w bazie danych zastępują reguły znajdujące się niżej, więc w tym przykładzie dostęp do funkcji odczytu /foo/bar/baz nadal byłby przyznawany, nawet jeśli reguła na ścieżce /foo/bar/baz zostałaby oceniona jako fałszywa.

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. Dzięki temu możesz łatwo wprowadzać zmiany w trakcie tworzenia aplikacji, ale gdy aplikacja będzie gotowa do dystrybucji, ważne jest, aby dane były spójne. 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 jednak uruchomisz aplikację, musisz określić indeksy dla wszystkich zapytań, aby mieć pewność, że będą one nadal działać, gdy aplikacja się rozrośnie.

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