Firebase Realtime Database-Sicherheitsregeln verstehen

Firebase Realtime Database-Sicherheitsregeln bestimmen, wer Lese- und Schreibzugriff auf Ihre wie Ihre Daten strukturiert sind und welche Indexe vorhanden sind. Diese Regeln gelten auf den Firebase-Servern und werden immer automatisch erzwungen. Jede Lese- und Schreibanfrage wird nur ausgeführt, wenn sie Ihren Regeln entspricht. Standardmäßig Ihre Regeln jedem Zugriff auf Ihre Datenbank verweigern. Dies dient dem Schutz Ihrer bis Sie genug Zeit haben, Ihre Regeln anzupassen oder Authentifizierung.

Echtzeit-Datenbanksicherheitsregeln haben eine JavaScript-ähnliche Syntax und sind in vier Arten verfügbar:

Regeltypen
.read Beschreibt, ob und wann Daten von Nutzern gelesen werden dürfen.
.write Beschreibt, ob und wann Daten geschrieben werden dürfen.
.valid Definiert, wie ein richtig formatierter Wert aussieht, ob er untergeordnete Attribute hat, und den Datentyp.
.indexOn Gibt ein untergeordnetes Element für den Index an, um Sortierung und Abfrage zu unterstützen.

Realtime Database-Sicherheitsübersicht

Firebase Realtime Database bietet eine umfassende Auswahl an Tools zur Verwaltung des für die Sicherheit Ihrer App. Diese Tools erleichtern die Authentifizierung Ihrer Nutzer, Nutzerberechtigungen erzwingen und Eingaben validieren.

Auf Firebase-basierten Apps wird mehr clientseitiger Code ausgeführt als in Apps mit vielen anderen Software-Stacks. Daher ist unser Ansatz für Sicherheit als Sie es gewohnt sind.

Authentifizierung

Ein häufiger erster Schritt zum Schutz Ihrer App zur Identifizierung der Nutzenden. Dieser Vorgang wird als Authentifizierung bezeichnet. Sie können Firebase Authentication verwenden. damit sich Nutzer in Ihrer App anmelden können. Firebase-Authentifizierung umfasst auch die Unterstützung gängiger Authentifizierungsmethoden wie Google und Facebook sowie Login-E-Mail-Adresse und Passwort, anonyme Anmeldung und vieles mehr.

Die Nutzeridentität ist ein wichtiges Sicherheitskonzept. Unterschiedliche Nutzer haben unterschiedliche Daten und manchmal auch unterschiedliche Funktionen. Zum Beispiel in einem Chat wird jede Nachricht dem Nutzer zugeordnet, der sie erstellt hat. Nutzer*innen können möglicherweise auch ihre eigenen Nachrichten löschen, jedoch nicht die von anderen geposteten Nachrichten. Nutzenden.

Autorisierung

Die Identifizierung Ihrer Nutzer ist nur ein Teil der Sicherheit. Sobald Sie wissen, wer diese Person ist, ihren Zugriff auf Daten in Ihrer Datenbank kontrollieren können. Echtzeit-Datenbanksicherheitsregeln können Sie den Zugriff für jeden Nutzer steuern. Hier ist eine Reihe von Sicherheitsregeln, die jedem Nutzer erlauben, den Pfad /foo/ zu lesen, aber keine eine, um dorthin zu schreiben:

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

.read- und .write-Regeln werden kaskadiert, sodass dieser Regelsatz Gewährt Lesezugriff auf alle Daten im Pfad /foo/ sowie alle tieferen Daten Pfade wie /foo/bar/baz. Beachten Sie, dass .read und .write-Regeln in der Datenbank überschreiben tiefere Regeln. In diesem Beispiel wird der Lesezugriff auf /foo/bar/baz weiterhin gewährt auch wenn eine Regel im Pfad /foo/bar/baz als falsch ausgewertet wurde.

Die Realtime Database-Sicherheitsregeln umfassen integrierte Variablen und Funktionen, mit denen Sie auf andere Pfade, serverseitige Zeitstempel, Authentifizierungsinformationen, und vieles mehr. Hier ein Beispiel für eine Regel, die Schreibzugriff authentifizierte Nutzer an /users/<uid>/, wobei <uid> ist Die ID des Nutzers, die Sie über Firebase Authentication erhalten haben.

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

Datenvalidierung

Die Firebase Realtime Database ist schemalos. So können Änderungen aber sobald Ihre App für den Vertrieb bereit ist, ist es wichtig, um einheitlich zu bleiben. Die Regelsprache enthält eine .validate-Regel, mit der Sie Validierungslogik mit denselben Ausdrücken anwenden können, die auch für .read- und .write-Regeln verwendet werden. Der einzige Unterschied dass Validierungsregeln nicht kaskadieren, sodass alle relevanten müssen Validierungsregeln den Wert "true" ergeben, damit der Schreibvorgang zulässig ist.

Diese Regel erzwingt, dass in /foo/ geschriebene Daten ein String sein müssen weniger als 100 Zeichen:

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

Validierungsregeln haben Zugriff auf dieselben integrierten Funktionen und Variablen als .read- und .write-Regeln. Sie können um Validierungsregeln zu erstellen, die Daten an anderer Stelle in Ihrem Datenbank, die Identität des Nutzers, die Serverzeit und vieles mehr.

Datenbankindexe definieren

Firebase Realtime Database ermöglicht das Sortieren und Abfragen von Daten. Für Small Data unterstützt die Datenbank Ad-hoc-Abfragen. die während der Entwicklung erforderlich sind. Bevor Sie Ihre App veröffentlichen, sollten Sie Indexe für alle Abfragen angeben, um sicherzustellen, dass sie Ihre App wächst.

Indexe werden mit der Regel .indexOn angegeben. Hier ist ein Beispiel für eine Indexdeklaration, mit der die Felder „Höhe“ und „Länge“ für eine Liste von Dinosauriern indexiert werden:

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

Nächste Schritte