Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Grundlegendes zu Firebase-Echtzeitdatenbankregeln

Die Sicherheitsregeln für Firebase-Echtzeitdatenbanken bestimmen, wer Lese- und Schreibzugriff auf Ihre Datenbank hat, wie Ihre Daten strukturiert sind und welche Indizes vorhanden sind. Diese Regeln befinden sich auf den Firebase-Servern und werden jederzeit automatisch durchgesetzt. Jede Lese- und Schreibanforderung wird nur ausgeführt, wenn Ihre Regeln dies zulassen. Standardmäßig erlauben Ihre Regeln niemandem den Zugriff auf Ihre Datenbank. Dies dient zum Schutz Ihrer Datenbank vor Missbrauch, bis Sie Zeit haben, Ihre Regeln anzupassen oder die Authentifizierung einzurichten.

Sicherheitsregeln für Echtzeitdatenbanken haben eine JavaScript-ähnliche Syntax und sind in vier Typen erhältlich:

Regeltypen
.lesen Beschreibt, ob und wann Daten von Benutzern gelesen werden dürfen.
.schreiben Beschreibt, ob und wann Daten geschrieben werden dürfen.
.bestätigen Definiert, wie ein korrekt formatierter Wert aussehen wird, ob er untergeordnete Attribute hat und welchen Datentyp.
.indexOn Gibt ein Kind an, das indiziert werden soll, um das Bestellen und Abfragen zu unterstützen.

Sicherheitsübersicht der Echtzeitdatenbank

Die Firebase-Echtzeitdatenbank bietet eine Reihe von Tools zum Verwalten der Sicherheit Ihrer App. Mit diesen Tools können Sie Ihre Benutzer auf einfache Weise authentifizieren, Benutzerberechtigungen erzwingen und Eingaben validieren.

Firebase-basierte Apps führen mehr clientseitigen Code aus als Apps mit vielen anderen Technologie-Stacks. Daher kann die Art und Weise, wie wir mit Sicherheit umgehen, etwas anders sein, als Sie es gewohnt sind.

Authentifizierung

Ein häufiger erster Schritt zur Sicherung Ihrer App ist die Identifizierung Ihrer Benutzer. Dieser Vorgang wird als Authentifizierung bezeichnet . Mithilfe der Firebase-Authentifizierung können sich Benutzer bei Ihrer App anmelden. Die Firebase-Authentifizierung bietet Drop-In-Unterstützung für gängige Authentifizierungsmethoden wie Google und Facebook sowie E-Mail- und Kennwortanmeldung, anonyme Anmeldung und mehr.

Die Benutzeridentität ist ein wichtiges Sicherheitskonzept. Unterschiedliche Benutzer haben unterschiedliche Daten und manchmal unterschiedliche Funktionen. In einer Chat-Anwendung ist beispielsweise jede Nachricht dem Benutzer zugeordnet, der sie erstellt hat. Benutzer können möglicherweise auch ihre eigenen Nachrichten löschen, jedoch keine von anderen Benutzern geposteten Nachrichten.

Genehmigung

Die Identifizierung Ihres Benutzers ist nur ein Teil der Sicherheit. Sobald Sie wissen, wer sie sind, müssen Sie den Zugriff auf Daten in Ihrer Datenbank steuern können. Mit den Sicherheitsregeln für Echtzeitdatenbanken können Sie den Zugriff für jeden Benutzer steuern. Hier ist zum Beispiel eine Reihe von Sicherheitsregeln, nach denen jeder den Pfad /foo/ lesen kann, aber niemand darauf schreiben kann:

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

.read und .write Regeln kaskadieren, sodass dieser Regelsatz Lesezugriff auf alle Daten im Pfad /foo/ sowie auf tiefere Pfade wie /foo/bar/baz gewährt. Beachten Sie, dass die in der Datenbank flacheren .read und .write Regeln tiefere Regeln überschreiben. .write in diesem Beispiel der Lesezugriff auf /foo/bar/baz weiterhin gewährt, selbst wenn eine Regel im Pfad /foo/bar/baz mit false bewertet wird.

Die Sicherheitsregeln für Echtzeitdatenbanken enthalten integrierte Variablen und Funktionen, mit denen Sie auf andere Pfade, serverseitige Zeitstempel, Authentifizierungsinformationen und mehr verweisen können. Hier ist ein Beispiel für eine Regel, die authentifizierten Benutzern Schreibzugriff auf /users/<uid>/ , wobei <uid> die ID des Benutzers ist, die durch Firebase-Authentifizierung erhalten wurde.

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

Datenvalidierung

Die Firebase-Echtzeitdatenbank ist schemenlos. Dies macht es einfach, Dinge während der Entwicklung zu ändern. Sobald Ihre App jedoch zur Verteilung bereit ist, ist es wichtig, dass die Daten konsistent bleiben. Die .validate enthält eine .validate Regel, mit der Sie die Validierungslogik mit denselben Ausdrücken anwenden können, die auch für .read und .write Regeln verwendet werden. Der einzige Unterschied besteht darin, dass Validierungsregeln nicht kaskadieren . Daher müssen alle relevanten Validierungsregeln als wahr ausgewertet werden, damit das Schreiben zulässig ist.

Diese Regeln erzwingen, dass in /foo/ geschriebene Daten eine Zeichenfolge mit weniger als 100 Zeichen sein müssen:

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

Validierungsregeln haben Zugriff auf dieselben integrierten Funktionen und Variablen wie .read und .write Regeln. Sie können diese verwenden, um Validierungsregeln zu erstellen, die Daten an anderer Stelle in Ihrer Datenbank, die Identität Ihres Benutzers, die Serverzeit und vieles mehr berücksichtigen.

Datenbankindizes definieren

Die Firebase-Echtzeitdatenbank ermöglicht das Bestellen und Abfragen von Daten. Bei kleinen Datenmengen unterstützt die Datenbank Ad-hoc-Abfragen, sodass während der Entwicklung im Allgemeinen keine Indizes erforderlich sind. Bevor Sie Ihre App starten, ist es wichtig, Indizes für alle Abfragen anzugeben, die Sie benötigen, um sicherzustellen, dass sie weiterhin funktionieren, wenn Ihre App wächst.

Indizes werden mit der .indexOn Regel angegeben. Hier ist eine beispielhafte Indexdeklaration, die die Höhen- und Längenfelder für eine Liste von Dinosauriern indiziert:

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

Nächste Schritte