Omówienie reguł bazy danych czasu rzeczywistego Firebase

Reguły zabezpieczeń bazy danych w czasie rzeczywistym Firebase określają, kto ma dostęp do odczytu i zapisu w Twojej bazie danych, jak są zorganizowane dane i jakie indeksy istnieją. Reguły te działają na serwerach Firebase i są wymuszane automatycznie przez cały czas. Każde żądanie odczytu i zapisu zostanie zrealizowane tylko wtedy, gdy pozwalają 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, dopóki nie będziesz mieć czasu na dostosowanie reguł lub skonfigurowanie uwierzytelniania.

Reguły bezpieczeństwa baz danych w czasie rzeczywistym mają składnię podobną do JavaScriptu i występują w czterech typach:

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

Przegląd bezpieczeństwa bazy danych czasu rzeczywistego

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

Aplikacje oparte na Firebase uruchamiają więcej kodu po stronie klienta niż te z wieloma innymi stosami technologicznymi. 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 w zabezpieczaniu aplikacji jest identyfikacja użytkowników. Proces ten nazywany jest uwierzytelnienie. Można użyć uwierzytelniania Firebase mieć użytkowników do zalogowania się do aplikacji. Uwierzytelnianie Firebase obejmuje obsługę popularnych metod uwierzytelniania, takich jak Google i Facebook, a także logowanie e-mailem i hasłem, 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 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 są, potrzebujesz sposobu na kontrolowanie ich dostępu do danych w Twojej bazie danych. Reguły bezpieczeństwa bazy danych czasu rzeczywistego umożliwiają kontrolę dostępu dla każdego użytkownika. Na przykład, oto zestaw reguł bezpieczeństwa, które pozwala każdemu odczytać ścieżki /foo/ , ale nikt nie napisać do niego:

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

.read i .write zasady kaskady, więc ten zestaw reguł dotacje czytać dostęp do wszelkich danych na ścieżce /foo/ , jak również wszelkie głębsze ścieżki takie jak /foo/bar/baz . Zauważ, że .read i .write zasady płytsze w ręcznym bazy głębsze zasady, tak aby dostęp do odczytu /foo/bar/baz będzie nadal przyznawana w tym przykładzie nawet jeśli reguła na ścieżce /foo/bar/baz ocenie w celu fałszywe.

Realtime Database Zasady bezpieczeństwa obejmują wbudowanych zmiennych i funkcji, które pozwalają odwołać się do innych ścieżek, znaczniki czasu po stronie serwera, informacji uwierzytelniania i więcej. Oto przykład z reguły, że dotacje zapisu dla uwierzytelnionych użytkowników do /users/<uid>/ , gdzie <uid> to identyfikator otrzymanego przez uwierzytelniania Firebase użytkownika.

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

Walidacji danych

Baza danych czasu rzeczywistego Firebase działa bez schematu. Ułatwia to wprowadzanie zmian w trakcie opracowywania, ale gdy aplikacja jest gotowa do dystrybucji, ważne jest, aby dane pozostały spójne. Język reguły zawiera .validate regułę, która pozwala na zastosowanie logiki walidacji przy użyciu tych samych wyrażeń używanych do .read i .write zasad. Jedyną różnicą jest to, że reguły sprawdzania poprawności nie kaskadowo, więc wszystkie istotne zasady walidacji musi ocenić wartość true w celu zapisu mają być dozwolone.

Te reguły egzekwować te dane zapisywane na /foo/ musi być ciąg mniej niż 100 znaków:

{
  "rules": {
    "foo": {
      ".validate": "newData.isString() && newData.val().length < 100"
    }
  }
}

Ważności zasady mieć dostęp do wszystkich takie same wbudowanych funkcji i zmiennych jak .read i .write zasad. Możesz ich użyć do tworzenia reguł sprawdzania poprawności, które uwzględniają dane w innym miejscu bazy danych, tożsamość użytkownika, czas serwera i wiele innych.

Definiowanie indeksów bazy 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 na ogół nie są wymagane podczas opracowywania. Jednak przed uruchomieniem aplikacji ważne jest, aby określić indeksy dla wszelkich zapytań, aby upewnić się, że będą działać w miarę rozwoju aplikacji.

Indeksy są określony za pomocą .indexOn regułę. 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