firebase
Zasady bazy danych
Szukaj…
Wprowadzenie
Dzięki Firebase Realtime Database Twoje zasady dotyczące baz danych stanowią bezpieczeństwo po stronie serwera. Musisz być bardzo ostrożny i świadomy, kto ma dostęp do twojej bazy danych. Ważne jest, aby nikt nie uzyskał dostępu do danych, które nie powinny.
Domyślnie reguły bazy danych Firebase Realtime zezwalają każdemu uwierzytelnionemu użytkownikowi na odczytywanie i zapisywanie wszystkich danych, prawdopodobnie nie jest to aplikacja, którą chcesz zrobić.
Spójrz na poniższe przykłady dla różnych scenariuszy.
Uwagi
Firebase Realtime Database zapewnia elastyczny, oparty na wyrażeniach język reguł ze składnią podobną do JavaScript, aby łatwo zdefiniować strukturę danych, sposób ich indeksowania oraz kiedy dane mogą być odczytywane i zapisywane. W połączeniu z naszymi usługami uwierzytelniania możesz określić, kto ma dostęp do danych i chronić dane osobowe użytkowników przed nieautoryzowanym dostępem.
Domyślnie reguły bazy danych wymagają uwierzytelnienia Firebase i przyznają pełne uprawnienia do odczytu i zapisu tylko uwierzytelnionym użytkownikom. Domyślne reguły gwarantują, że twoja baza danych nie będzie dostępna dla nikogo, zanim będziesz mieć możliwość skonfigurowania
Oficjalna dokumentacja
https://firebase.google.com/docs/database/security/quickstart
Jak skonfigurować reguły
- Wejdź do konsoli Firebase.
- Wybierz swój projekt
- Kliknij sekcję Baza danych po lewej stronie, a następnie wybierz kartę Reguły.
Jeśli chcesz przetestować reguły bezpieczeństwa przed wprowadzeniem ich do produkcji, możesz symulować operacje w konsoli za pomocą przycisku Symuluj w prawym górnym rogu edytora reguł.
Domyślne reguły
Domyślne reguły wymagają uwierzytelnienia.
Umożliwiają pełny dostęp do odczytu i zapisu uwierzytelnionym użytkownikom Twojej aplikacji. Są one przydatne, jeśli chcesz, aby dane były otwarte dla wszystkich użytkowników Twojej aplikacji, ale nie chcesz, aby były otwarte dla świata.
// These rules require authentication
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
Jak ustawić publicznie pliki do odczytu i zapisu
Po prostu zdefiniuj:
// These rules give anyone, even people who are not users of your app,
// read and write access to your database
{
"rules": {
".read": true,
".write": true
}
}
Może to być przydatne podczas programowania, ale zwróć uwagę, ponieważ ten poziom dostępu oznacza, że każdy może odczytywać i zapisywać dane w bazie danych .
Jak wyłączyć dostęp do odczytu i zapisu
Możesz zdefiniować prywatne reguły, aby wyłączyć dostęp do odczytu i zapisu do bazy danych przez użytkowników. Dzięki tym regułom możesz uzyskać dostęp do bazy danych tylko wtedy, gdy masz uprawnienia administracyjne (które możesz uzyskać, uzyskując dostęp do bazy danych za pośrednictwem konsoli Firebase lub logując się z serwera ) .
// These rules don't allow anyone read or write access to your database
{
"rules": {
".read": false,
".write": false
}
}
Jak przyznać dostęp tylko uwierzytelnionym użytkownikom
Oto przykład reguły, która nadaje każdemu uwierzytelnionemu użytkownikowi osobisty węzeł w /users/$user_id
gdzie $ user_id jest identyfikatorem użytkownika uzyskanym przez Uwierzytelnianie .
// These rules grant access to a node matching the authenticated
// user's ID from the Firebase auth token
{
"rules": {
"users": {
"$user_id": {
".read": "$user_id === auth.uid",
".write": "$user_id === auth.uid"
}
}
}
}
Jak zezwolić na odczytanie określonego elementu z grupy, ale uniemożliwić wyświetlanie listy członków grupy
Powszechną praktyką jest tworzenie grup elementów poprzez tworzenie prostych węzłów wartości z identyfikatorem elementu jako kluczem. Na przykład możemy dodać użytkownika do grupy „administratorzy”, tworząc węzeł w /administrators/$user_id
z wartością true
. Ze względów bezpieczeństwa nie chcemy, aby ktokolwiek wiedział, kim są administratorzy, ale nadal chcemy sprawdzić, czy użytkownik uwierzytelniony jest administratorem . Dzięki tym regułom możemy to zrobić:
{
"rules": {
"administrators": {
// No one can list administrators
".read": "false",
"$uid": {
// Authenticated user can check if they are in this group
".read": "$uid === auth.uid",
// Administrators can write
".write": "data.parent().child(auth.uid).val() === true",
// Allow only add or delete, no duplicates
".validate": "!data.exists() || !newData.exists() || newData.isBoolean()",
}
}
}
}