Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Poznaj reguły bazy danych czasu rzeczywistego Firebase

Reguły zabezpieczeń bazy danych czasu rzeczywistego Firebase określają, kto ma dostęp do odczytu i zapisu w Twojej bazie danych, jaka jest struktura Twoich danych i jakie indeksy istnieją. Te reguły działają na serwerach Firebase i są zawsze automatycznie egzekwowane. Każde żądanie odczytu i zapisu zostanie zakończone tylko wtedy, gdy zezwalają na to twoje reguły. Domyślnie Twoje reguły nie pozwalają nikomu na dostęp do Twojej bazy danych. Ma to na celu ochronę bazy danych przed nadużyciami do czasu dostosowania reguł lub skonfigurowania uwierzytelniania.

Reguły bezpieczeństwa bazy danych czasu rzeczywistego mają składnię podobną do JavaScript i występują w czterech typach:

Typy reguł
.czytać Opisuje, czy i kiedy dane mogą być odczytywane przez użytkowników.
.pisać Opisuje, czy i kiedy można zapisywać dane.
.uprawomocnić Określa, jak będzie wyglądać poprawnie sformatowana wartość, czy ma atrybuty potomne i typ danych.
.indexOn Określa element podrzędny do indeksowania w celu obsługi porządkowania i zapytań.

Omówienie zabezpieczeń bazy danych czasu rzeczywistego

Baza danych czasu rzeczywistego Firebase zapewnia pełny zestaw narzędzi do zarządzania bezpieczeństwem aplikacji. Te narzędzia ułatwiają uwierzytelnianie użytkowników, egzekwowanie uprawnień użytkowników i sprawdzanie poprawności danych wejściowych.

Aplikacje oparte na Firebase uruchamiają więcej kodu po stronie klienta niż te z wieloma innymi stosami technologii. Dlatego sposób, w jaki podchodzimy do bezpieczeństwa, może być nieco inny niż do tego, do którego jesteś przyzwyczajony.

Poświadczenie

Typowym pierwszym krokiem do zabezpieczenia aplikacji jest zidentyfikowanie użytkowników. Ten proces nazywa się uwierzytelnianiem . Możesz użyć uwierzytelniania Firebase, aby użytkownicy mogli logować się do Twojej aplikacji. Uwierzytelnianie Firebase obejmuje obsługę typu drop-in dla popularnych metod uwierzytelniania, takich jak Google i Facebook, a także logowanie za pomocą poczty e-mail i hasła, logowanie anonimowe i nie tylko.

Tożsamość użytkownika to ważna koncepcja bezpieczeństwa. Różni użytkownicy mają różne dane, a czasami mają różne 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ż mieć możliwość usuwania własnych wiadomości, ale nie wiadomości opublikowanych przez innych użytkowników.

Upoważnienie

Identyfikacja użytkownika to tylko część bezpieczeństwa. Gdy już wiesz, kim oni są, potrzebujesz sposobu na kontrolowanie ich dostępu do danych w Twojej bazie danych. Reguły bezpieczeństwa bazy danych czasu rzeczywistego pozwalają kontrolować dostęp dla każdego użytkownika. Na przykład, oto zestaw reguł bezpieczeństwa, który pozwala każdemu odczytać ścieżkę /foo/ , ale nikomu nie może do niej pisać:

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

.read i .write są kaskadowe, więc ten .write reguł przyznaje dostęp do odczytu wszelkich danych w path /foo/ a także wszelkich głębszych ścieżek, takich jak /foo/bar/baz . Zauważ, że .read i .write płytsze w bazie danych zastępują głębsze reguły, więc dostęp do odczytu do /foo/bar/baz byłby nadal przyznany w tym przykładzie, nawet jeśli reguła na ścieżce /foo/bar/baz wartość false.

Reguły bezpieczeństwa bazy danych czasu rzeczywistego obejmują wbudowane zmienne 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 uprawnienia do zapisu uwierzytelnionym użytkownikom do /users/<uid>/ , gdzie <uid> to identyfikator użytkownika uzyskany przez uwierzytelnianie Firebase.

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

Walidacji danych

Baza danych czasu rzeczywistego Firebase nie ma schematu. Ułatwia to wprowadzanie zmian w trakcie opracowywania, ale gdy aplikacja jest 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 przy użyciu tych samych wyrażeń, które są używane w .read i .write . Jedyną różnicą jest to, że reguły walidacji nie są kaskadowe , więc wszystkie odpowiednie reguły walidacji muszą mieć wartość true, aby zapis był dozwolony.

Te reguły wymuszają, że dane zapisane 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 wszystkich tych samych wbudowanych funkcji i zmiennych, co .read i .write . Możesz ich użyć do tworzenia reguł walidacji, które uwzględniają dane w innych miejscach bazy danych, tożsamość użytkownika, czas serwera i wiele innych.

Definiowanie indeksów baz danych

Baza danych czasu rzeczywistego Firebase umożliwia porządkowanie i odpytywanie danych. W przypadku małych rozmiarów danych baza danych obsługuje zapytania ad hoc, więc indeksy nie są zwykle wymagane podczas programowania. Jednak przed uruchomieniem aplikacji ważne jest, aby określić indeksy dla wszelkich zapytań, które musisz mieć, aby zapewnić, że będą one nadal działać wraz z rozwojem aplikacji.

Indeksy są określane za pomocą reguły .indexOn . Oto przykładowa deklaracja indeksu, która indeksuje pola wysokości i długości dla listy dinozaurów:

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

Następne kroki