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 werden auf den Firebase-Servern gespeichert und jederzeit automatisch erzwungen. Jede Lese- und Schreibanfrage wird nur ausgeführt, wenn sie Ihren Regeln entspricht. Standardmäßig gewähren Ihre Regeln niemandem Zugriff auf Ihre Datenbank. Dies dient dem Schutz Ihrer von Missbrauch bis hin zu Zeit, Ihre Regeln anzupassen oder Authentifizierung.

Realtime Database-Sicherheitsregeln haben eine JavaScript-ähnliche Syntax und es gibt vier Arten:

Regeltypen
.read Beschreibt, ob und wann Daten von Nutzern gelesen werden dürfen.
.write Beschreibt, ob und wann Daten geschrieben werden dürfen.
.valid Hier wird definiert, wie ein korrekt formatierter Wert aussehen soll, ob es untergeordnete Attribute gibt und der Datentyp.
.indexOn Gibt ein untergeordnetes Element für den Index an, um Sortierung und Abfrage zu unterstützen.

Realtime Database-Sicherheitsübersicht

Die Firebase Realtime Database bietet eine umfassende Palette von Tools zur Verwaltung der Sicherheit Ihrer App. Mit diesen Tools können Sie Nutzer einfach authentifizieren, Nutzerberechtigungen erzwingen und Eingaben validieren.

In Firebase-Apps wird mehr clientseitiger Code ausgeführt als in vielen anderen Apps Software-Stacks. Daher ist unser Ansatz in Bezug auf Sicherheit möglicherweise etwas anders 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 Nutzende haben unterschiedliche und manchmal haben sie unterschiedliche Funktionen. In einer Chat-Anwendung ist beispielsweise jede Nachricht mit dem Nutzer verknüpft, der sie erstellt hat. Nutzer können möglicherweise auch ihre eigenen Nachrichten löschen, aber nicht Nachrichten, die von anderen Nutzern gepostet wurden.

Autorisierung

Die Identifizierung der Nutzer ist nur ein Teil der Sicherheit. Sobald Sie wissen, wer diese Person ist, ihren Zugriff auf Daten in Ihrer Datenbank kontrollieren können. Mit Realtime Database-Sicherheitsregeln können Sie den Zugriff für jeden Nutzer steuern. Im folgenden Beispiel wird eine Reihe von Sicherheitsregeln gezeigt, mit denen jeder den Pfad /foo/ lesen, aber niemand darauf schreiben kann:

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

Die Regeln .read und .write werden kaskadiert angewendet. Daher gewährt diese Regelsammlung Lesezugriff auf alle Daten unter dem Pfad /foo/ sowie auf alle tieferen Pfade wie /foo/bar/baz. Beachten Sie, dass Regeln für .read und .write, die sich weiter oben in der Datenbank befinden, Regeln überschreiben, die sich weiter unten befinden. Daher wird in diesem Beispiel der Lesezugriff auf /foo/bar/baz weiterhin gewährt, auch wenn eine Regel für den Pfad /foo/bar/baz als falsch ausgewertet wird.

Die Sicherheitsregeln der Realtime Database enthalten eingebaute Variablen und Funktionen, mit denen Sie unter anderem auf andere Pfade, serverseitige Zeitstempel und Authentifizierungsinformationen verweisen können. 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 Sie während der Entwicklung ganz einfach Änderungen vornehmen. Sobald Ihre App jedoch für die Bereitstellung bereit ist, müssen die Daten einheitlich bleiben. Die Regelsprache enthält ein .validate Regel, mit der Sie Validierungslogik mit denselben Ausdrücken anwenden können für .read- und .write-Regeln. Der einzige Unterschied besteht darin, dass Gültigkeitsregeln nicht kaskadieren. Daher müssen alle relevanten Gültigkeitsregeln als wahr ausgewertet werden, damit die Schreibvorgänge zulässig sind.

Mit dieser Regel wird festgelegt, dass Daten, die in /foo/ geschrieben werden, ein String 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 als .read- und .write-Regeln. Mit diesen können Sie Validierungsregeln erstellen, die auf Daten an anderer Stelle in Ihrer Datenbank, auf die Identität des Nutzers, die Serverzeit und vieles mehr achten.

Datenbankindexe definieren

Mit Firebase Realtime Database können Sie Daten sortieren und abfragen. Für Small Data unterstützt die Datenbank Ad-hoc-Abfragen. die während der Entwicklung erforderlich sind. Bevor Sie Ihre App veröffentlichen, ist es jedoch wichtig, Indizes für alle Abfragen anzugeben, damit sie auch dann funktionieren, wenn Ihre App wächst.

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

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

Nächste Schritte