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 są dostępne 4 typy:

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ń.

Omówienie zabezpieczeń Bazy danych czasu rzeczywistego

Baza danych czasu rzeczywistego Firebase to 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 pozwalają kontrolować dostęp każdego użytkownika. 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 uprawnienia do zapisu w przypadku uwierzytelnionych użytkowników w domenie /users/<uid>/, gdzie <uid> to identyfikator użytkownika uzyskanego za pomocą uwierzytelniania Firebase.

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

Walidacja danych

Baza danych czasu rzeczywistego Firebase 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 te elementy: .validate reguły, która umożliwia zastosowanie logiki weryfikacji przy użyciu tych samych wyrażeń dla reguł .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

Baza danych czasu rzeczywistego Firebase umożliwia porządkowanie danych i tworzenie do nich zapytań. 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: deklaracja indeksu, która pozwoliłaby indeksować pola wysokości i długości dla listy dinozaury:

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

Dalsze kroki