Reguły zabezpieczeń Bazy danych czasu rzeczywistego Firebase określają, kto ma uprawnienia do odczytu i zapisu w bazie danych, jaka jest struktura danych i jakie indeksy istnieją. Te reguły są przechowywane na serwerach Firebase i są egzekwowane automatycznie przez cały czas. Każde żądanie odczytu i zapisu zostanie zrealizowane tylko wtedy, gdy zezwalają na to reguły. Domyślnie reguły nie zezwalają nikomu na dostęp do Twojej bazy danych. Ma to na celu ochronę bazy danych przed nadużyciami, dopóki nie uda Ci się dostosować reguł lub skonfigurować uwierzytelniania.
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ć poprawnie sformatowana wartość, czy ma atrybuty podrzędne i typ danych. |
indexOn, | Określa element podrzędny do zindeksowania, aby umożliwić sortowanie i wyszukiwanie. |
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 podchodzimy do bezpieczeństwa w inny sposób niż zwykle.
Uwierzytelnianie
Pierwszym krokiem w zabezpieczeniu aplikacji jest zwykle identyfikacja użytkowników. Ten proces jest nazywany uwierzytelnianiem. Aby umożliwić użytkownikom logowanie się w aplikacji, możesz użyć usługi Uwierzytelnianie Firebase. Usługa ta obsługuje popularne metody uwierzytelniania, takie jak Google i Facebook, a także logowanie się za pomocą adresu e-mail i hasła oraz logowanie anonimowe.
Tożsamość użytkownika jest ważną koncepcją bezpieczeństwa. Różni użytkownicy mają inne dane i czasami 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 to tylko część zabezpieczeń. 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 umożliwiają kontrolowanie dostępu poszczególnych użytkowników. 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
i .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ą odwoływanie się do innych ścieżek, sygnatur czasowych po stronie serwera, informacji uwierzytelniających i nie tylko. Oto przykład reguły, która przyznaje uwierzytelnionym użytkownikom dostęp do funkcji /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 zawiera 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
. Jedyną różnicą jest to, że reguły walidacji nie działają kaskadowo, więc aby zapis był dozwolony, wszystkie odpowiednie reguły walidacji muszą zwracać wartość „prawda”.
Te reguły wymagają, aby dane zapisane w polu /foo/
były ciągiem znaków o długości nieprzekraczającej 100 znaków:
{ "rules": { "foo": { ".validate": "newData.isString() && newData.val().length < 100" } } }
Reguły weryfikacji mają dostęp do wszystkich wbudowanych funkcji i zmiennych co reguły .read
i .write
. Możesz ich używać do tworzenia reguł walidacji, które uwzględniają dane z innych miejsc w Twojej bazie danych, tożsamość użytkownika, czas serwera i wiele innych informacji.
Definiowanie indeksów baz danych
Interfejs Firebase Realtime Database umożliwia porządkowanie danych i wykonywanie na nich zapytań. W przypadku małych zbiorów danych baza danych obsługuje zapytania doraźne, więc indeksy nie są zwykle wymagane podczas tworzenia. Zanim jednak uruchomisz aplikację, musisz określić indeksy dla wszystkich tworzonych zapytań, aby mieć pewność, że będą one nadal działać w miarę rozwoju aplikacji.
Indeksy są określane 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
- Rozpocznij planowanie tworzenia reguł dla bazy danych.
- Dowiedz się więcej o zabezpieczaniu danych za pomocą reguł bezpieczeństwa.
- Dowiedz się więcej o określaniu indeksów za pomocą reguł.