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