Catch up on everthing we announced at this year's Firebase Summit. Learn more

Verstehen Sie die Regeln für die Firebase-Echtzeitdatenbank

Firebase Realtime Database Security Rules legen fest, wer Lese- und Schreibzugriff auf Ihre Datenbank hat, wie Ihre Daten strukturiert sind und welche Indizes vorhanden sind. Diese Regeln leben 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 dazu, Ihre Datenbank vor Missbrauch zu schützen, bis Sie Zeit haben, Ihre Regeln anzupassen oder die Authentifizierung einzurichten.

Echtzeit-Datenbanksicherheitsregeln 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 aussieht, ob er über untergeordnete Attribute verfügt und den Datentyp.
.indexOn Gibt ein untergeordnetes Element an, das indiziert werden soll, um das Sortieren und Abfragen zu unterstützen.

Überblick über die Sicherheit der Echtzeitdatenbank

Die Firebase Realtime Database bietet einen vollständigen Satz von Tools zur Verwaltung der Sicherheit Ihrer App. Mit diesen Tools können Sie Ihre Benutzer ganz einfach authentifizieren, Benutzerberechtigungen erzwingen und Eingaben überprüfen.

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

Authentifizierung

Ein üblicher erster Schritt zur Sicherung Ihrer App ist die Identifizierung Ihrer Benutzer. Dieser Vorgang wird als Authentifizierung bezeichnet. Sie können mit Firebase - Authentifizierung Benutzer müssen Ihre App anmelden. Firebase Authentication umfasst Drop-In-Unterstützung für gängige Authentifizierungsmethoden wie Google und Facebook sowie E-Mail- und Passwortanmeldung, anonyme Anmeldung und mehr.

Die Benutzeridentität ist ein wichtiges Sicherheitskonzept. Unterschiedliche Benutzer haben unterschiedliche Daten und manchmal haben sie unterschiedliche Fähigkeiten. 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 Nachrichten, die von anderen Benutzern gepostet wurden.

Genehmigung

Die Identifizierung Ihres Benutzers ist nur ein Teil der Sicherheit. Sobald Sie wissen, wer sie sind, müssen Sie ihren Zugriff auf die Daten in Ihrer Datenbank kontrollieren. Mithilfe von Echtzeit-Datenbanksicherheitsregeln können Sie den Zugriff für jeden Benutzer steuern. Zum Beispiel, hier ist ein Satz von Sicherheitsregeln , die jemand den Weg zu lesen erlaubt /foo/ , aber niemand zu schreiben , um es:

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

.read und .write Regeln kaskadieren, so dass dieser Regelsatz ermöglicht den Zugriff auf alle Daten auf Pfad lesen /foo/ sowie alle tieferen Pfade wie /foo/bar/baz . Beachten Sie, dass .read und .write Regeln flacher in der Datenbank überschreibt tiefe Regeln, so Lesezugriff auf /foo/bar/baz noch in diesem Beispiel gewährt werden würde , selbst wenn eine Regel auf dem Weg /foo/bar/baz zu falsch ausgewertet.

Die Echtzeit - Datenbank - Sicherheitsregeln umfassen integrierte Variablen und Funktionen , die es Ihnen ermöglichen, andere Wege, serverseitige Zeitstempel, Authentifizierungsinformationen und vieles mehr zu finden. Hier ist ein Beispiel für eine Regel , dass gewährt den Zugriff für authentifizierte Benutzer zu schreiben /users/<uid>/ , wobei <uid> ist die ID des Benutzers durch Authentifizierung Firebase erhalten.

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

Datenvalidierung

Die Firebase Realtime Database ist schemalos. Dies macht es einfach, Dinge während der Entwicklung zu ändern, aber sobald Ihre App zur Verteilung bereit ist, ist es wichtig, dass die Daten konsistent bleiben. Die Regelsprache enthält eine .validate Regel, können Sie Validierungslogik mit den gleichen Ausdrücken für verwendet anzuwenden .read und .write Regeln. Der einzige Unterschied besteht darin , dass die Validierungsregeln nicht kaskadieren tun, so dass alle relevanten Validierungsregeln auf true , um bewerten müssen für die Schreib erlaubt zu werden.

Diese Regel erzwingen , dass die Daten geschrieben /foo/ muss eine Zeichenfolge weniger als 100 Zeichen:

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

Validierungsregeln haben Zugriff auf alle die gleichen integrierten Funktionen und Variablen als .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 Realtime Database 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 jedoch wichtig, Indizes für alle Abfragen anzugeben, die Sie benötigen, um sicherzustellen, dass sie weiterhin funktionieren, wenn Ihre App wächst.

Indizes werden die angegebene Verwendung .indexOn Regel. Hier ist ein Beispiel für eine Indexdeklaration, die die Höhen- und Längenfelder für eine Liste von Dinosauriern indizieren würde:

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

Nächste Schritte