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. Ułatwiają one uwierzytelnianie użytkowników, wymuszanie ich uprawnień i weryfikowanie danych wejściowych.
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
Częstym pierwszym krokiem do zabezpieczenia aplikacji jest identyfikacja użytkowników. Ten proces nazywa się 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ą również usuwać własne wiadomości, ale nie wiadomości publikowane 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 umożliwiają kontrolowanie dostępu poszczególnych użytkowników. Na przykład oto zestaw reguł zabezpieczeń, które pozwalają każdemu na odczytywanie ścieżki /foo/
, ale nikt nie może w niej zapisywać:
{ "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 bezpieczeństwa w Realtime Database zawierają
wbudowane zmienne
i funkcje, które umożliwiają odwoływanie się do innych ścieżek, sygnatur czasowych po stronie serwera, informacji uwierzytelniających i innych danych. Oto przykład reguły, która przyznaje uwierzytelnionym użytkownikom uprawnienia do zapisu w tabeli /users/<uid>/
, gdzie <uid> to identyfikator użytkownika uzyskany za pomocą metody 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 stosowanie logiki weryfikacji przy użyciu tych samych wyrażeń co 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”.
Ta reguła wymusza, aby dane zapisywane w /foo/
muszą być ciągiem krótszym niż 100 znaków:
{ "rules": { "foo": { ".validate": "newData.isString() && newData.val().length < 100" } } }
Reguły walidacji mają dostęp do tych samych 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
Firebase Realtime Database umożliwia sortowanie i wysyłanie zapytań dotyczących danych. 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 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ładowa deklaracja indeksu, która pozwoliłaby indeksować pola wysokości i długości listy dinozaurów:
{ "rules": { "dinosaurs": { ".indexOn": ["height", "length"] } } }
Dalsze kroki
- Rozpocznij planowanie tworzenia reguł dla bazy danych.
- Dowiedz się więcej o zabezpieczaniu danych przy użyciu reguł zabezpieczeń.
- Dowiedz się więcej o określaniu indeksów za pomocą reguł.