Die Sicherheitsregeln der Firebase Realtime Database bestimmen, wer Lese- und Schreibzugriff auf Ihre Datenbank hat, wie Ihre Daten strukturiert sind und welche Indexe vorhanden sind. Diese Regeln befinden sich auf den Firebase-Servern und werden jederzeit automatisch erzwungen. Jede Lese- und Schreibanfrage wird nur ausgeführt, wenn dies durch Ihre Regeln zulässig ist. Standardmäßig erlauben Ihre Regeln niemandem den Zugriff auf Ihre Datenbank. So wird Ihre Datenbank vor Missbrauch geschützt, bis Sie Zeit haben, Ihre Regeln anzupassen oder die Authentifizierung einzurichten.
Sicherheitsregeln für die Realtime Database haben eine JavaScript-ähnliche Syntax und sind in vier Typen 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. |
| .validate | Definiert, wie ein korrekt formatierter Wert aussieht, ob er untergeordnete Attribute hat und welchen Datentyp er hat. |
| .indexOn | Gibt ein untergeordnetes Element an, das indexiert werden soll, um die Sortierung und Abfrage zu unterstützen. |
Realtime Database Sicherheitsübersicht
The Firebase Realtime Database bietet eine umfassende Reihe von Tools zum Verwalten der Sicherheit Ihrer App. Mit diesen Tools können Sie Ihre Nutzer ganz einfach authentifizieren, Nutzerberechtigungen erzwingen und Eingaben validieren.
In Apps, die auf Firebase basieren, wird mehr clientseitiger Code ausgeführt als in Apps mit vielen anderen Technologie-Stacks. Daher kann unser Ansatz für die Sicherheit etwas anders sein, als Sie es gewohnt sind.
Authentifizierung
Ein häufiger erster Schritt zum Sichern Ihrer App ist das Identifizieren Ihrer Nutzer. Dieser Vorgang wird als Authentifizierung bezeichnet. Mit Firebase Authentication können sich Nutzer in Ihrer App anmelden. Firebase Authentication bietet sofort einsatzbereite Unterstützung für gängige Authentifizierungsmethoden wie Google und Facebook sowie die Anmeldung mit E-Mail-Adresse und Passwort, die anonyme Anmeldung und mehr.
Die Nutzeridentität ist ein wichtiges Sicherheitskonzept. Verschiedene Nutzer haben unterschiedliche Daten und manchmal auch unterschiedliche Funktionen. In einer Chat-App ist beispielsweise jede Nachricht mit dem Nutzer verknüpft, der sie erstellt hat. Nutzer können auch ihre eigenen Nachrichten löschen, aber nicht die von anderen Nutzern.
Autorisierung
Das Identifizieren Ihres Nutzers ist nur ein Teil der Sicherheit. Sobald Sie wissen, wer er ist, benötigen Sie eine Möglichkeit, den Zugriff auf Daten in Ihrer Datenbank zu steuern. Mit den Sicherheitsregeln der Realtime Database können Sie den Zugriff für jeden Nutzer steuern. Hier ist beispielsweise eine Reihe von Sicherheitsregeln, mit denen jeder den Pfad /foo/ lesen, aber niemand in ihn schreiben kann:
{
"rules": {
"foo": {
".read": true,
".write": false
}
}
}.read und .write Regeln werden kaskadiert. Dieses Regelset
gewährt also Lesezugriff auf alle Daten im Pfad /foo/ sowie auf alle tieferen
Pfade wie /foo/bar/baz. Beachten Sie, dass .read und
.write Regeln, die sich weiter oben in der Datenbank befinden, Regeln überschreiben, die sich weiter unten befinden. Der
Lesezugriff auf /foo/bar/baz wird in diesem Beispiel also auch dann gewährt,
wenn eine Regel im Pfad /foo/bar/baz als „false“ ausgewertet wird.
Die Sicherheitsregeln der Realtime Database 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 Nutzern Schreibzugriff auf /users/<uid>/ gewährt, wobei <uid> die ID des Nutzers ist, die über Firebase Authentication abgerufen wurde.
{
"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 zur Verteilung bereit ist, müssen die Daten konsistent bleiben. Die Regelsprache enthält eine .validate-Regel, mit der Sie Validierungslogik mit denselben Ausdrücken anwenden können, die für .read- und .write-Regeln verwendet werden. Der einzige Unterschied besteht darin,
dass Validierungsregeln nicht kaskadiert werden. Damit der Schreibvorgang zulässig ist, müssen also alle relevanten
Validierungsregeln als „true“ ausgewertet werden.
Diese Regel erzwingt, 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 alle integrierten Funktionen und Variablen wie .read- und .write-Regeln. So können Sie Validierungsregeln erstellen, die Daten an anderer Stelle in Ihrer Datenbank, die Identität Ihres Nutzers, die Serverzeit und vieles mehr berücksichtigen.
Datenbankindexe definieren
Die Firebase Realtime Database ermöglicht das Sortieren und Abfragen von Daten. Bei kleinen Datenmengen unterstützt die Datenbank Ad-hoc-Abfragen, sodass während der Entwicklung in der Regel keine Indexe erforderlich sind. Vor dem Start Ihrer App ist es jedoch wichtig, Indexe 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 für eine Indexdeklaration, mit der die Felder „height“ und „length“ für eine Liste von Dinosauriern indexiert werden:
{
"rules": {
"dinosaurs": {
".indexOn": ["height", "length"]
}
}
}Nächste Schritte
- Erste Schritte zur Planung der Regelentwicklung für Ihre Datenbank.
- Weitere Informationen zum Sichern Ihrer Daten mit Sicherheitsregeln
- Weitere Informationen zum Angeben von Indexen mit Regeln