In Firebase Realtime Database-Sicherheitsregeln schützen Sie Ihre Daten vor nicht autorisierten Benutzern und schützen Ihre Datenstruktur.
In diesem Kurztipp-Tutorial erkläre ich, wie Sie Ihre Datenbanksicherheitsregeln richtig konfigurieren, sodass nur autorisierte Benutzer Lese- oder Schreibzugriff auf Daten haben. Ich zeige Ihnen auch, wie Sie Ihre Daten so strukturieren können, dass sie leicht zu sichern sind.
Nehmen wir an, wir haben JSON-Daten in unserer Firebase-Datenbank, wie im folgenden Beispiel:
"users": "user1": "firstName": "Chike", "lastName": "Mgbemena", "age": "89" "phoneNumber": "07012345678", "user2": "firstName ":" Godswill "," lastName ":" Okwara "," age ":" 12 "" phoneNumber ":" 0701234 "," user3 ": " firstName ":" Onu "," lastName ": 543," Alter ": 90" Telefonnummer ":" 07012345678 ",…
Wenn Sie sich die Datenbank ansehen, können Sie feststellen, dass unsere Daten einige Probleme haben:
user1
und user3
) haben die gleichen Telefonnummern. Wir möchten, dass diese einzigartig sind.user3
hat eine Zahl für den Nachnamen anstelle einer Zeichenfolge.user2
hat nur sieben Ziffern anstatt 11. user1
und user2
ist eine Zeichenfolge, während die von user3
ist eine Zahl.Mit all diesen Mängeln in unseren Daten haben wir die Datenintegrität verloren. In den folgenden Schritten zeige ich Ihnen, wie Sie diese verhindern können.
Die Firebase-Echtzeitdatenbank verfügt über die folgenden Regeltypen:
Art | Funktion |
---|---|
.lesen | Beschreibt, ob und wann Daten von Benutzern gelesen werden dürfen. |
.schreiben | Beschreiben Sie, ob und wann Daten geschrieben werden dürfen. |
.bestätigen | Legt fest, wie ein korrekt formatierter Wert aussehen wird, ob er untergeordnete Attribute hat und welchen Datentyp er hat. |
.indexOn | Gibt ein zu indizierendes Kind an, um das Sortieren und Abfragen zu unterstützen. |
Weitere Informationen dazu finden Sie in den Firebase-Dokumenten.
Hier ist eine sehr freizügige Regel für die Benutzer
Schlüssel in unserer Datenbank.
"rules": "users": // Benutzer sind für jeden lesbar ".read": true, // Benutzer sind für jeden schreibbar ".write": true
Dies ist schlecht, da jeder Benutzer Daten in die Datenbank lesen oder schreiben kann. Jeder kann auf den Pfad zugreifen / Benutzer /
sowie tiefere Wege. Nicht nur das, aber es gibt keine Struktur für die Daten der Benutzer.
"rules": "users": "$ uid": ".read": "auth.uid == $ uid", ".write": "auth.uid == $ uid",
Mit diesen Regeln steuern wir den Zugriff auf die Benutzerdatensätze für angemeldete Benutzer. Darüber hinaus können Benutzer nur ihre eigenen Daten lesen oder schreiben. Wir machen das mit einem Platzhalter: $ uid
. Dies ist eine Variable, die den untergeordneten Schlüssel darstellt (Variablennamen beginnen mit $
). Zum Beispiel Zugriff auf den Pfad / Benutzer / Benutzer1
, $ uid
ist "user1"
.
Als nächstes nutzen wir die Auth
Variable, die den aktuell authentifizierten Benutzer darstellt. Dies ist eine vordefinierte Servervariable, die von Firebase bereitgestellt wird. In den Zeilen 5 und 6 erzwingen wir eine Einschränkung der Zugänglichkeit, dass nur der authentifizierte Benutzer mit derselben ID wie der Benutzerdatensatz seine Daten lesen oder schreiben kann. Mit anderen Worten, für jeden Benutzer wird Lese- und Schreibzugriff gewährt / Benutzer /
, woher
steht für die aktuell authentifizierte Benutzer-ID.
Andere Firebase-Servervariablen sind:
jetzt | Die aktuelle Zeit in Millisekunden seit der Linux-Epoche. |
Wurzel | EIN RuleDataSnapshot Darstellen des Stammpfads in der Firebase-Datenbank, wie er vor dem versuchten Vorgang vorhanden ist. |
neue Daten | EIN RuleDataSnapshot Darstellung der Daten so, wie sie nach der versuchten Operation existieren würden. Es beinhaltet die neuen Daten, die geschrieben werden, und vorhandene Daten. |
Daten | Ein RuleDataSnapshot, der die Daten darstellt, die vor dem versuchten Vorgang vorhanden waren. |
Auth | Stellt die Token-Nutzlast eines authentifizierten Benutzers dar. |
Weitere Informationen zu diesen und anderen Servervariablen finden Sie in den Firebase-Dokumenten.
Wir können auch Firebase-Regeln verwenden, um Einschränkungen für die Daten in unserer Datenbank durchzusetzen.
In den folgenden Regeln in den Zeilen 8 und 11 stellen wir zum Beispiel sicher, dass alle neuen Werte für den Vornamen und Nachnamen eine Zeichenfolge sein müssen. In Zeile 14 stellen wir sicher, dass das Alter eine Zahl ist. In den Zeilen 17 und 18 setzen wir schließlich ein, dass der Wert der Telefonnummer eine Zeichenfolge sein muss und die Länge 11 haben muss.
"rules": "users": "$ uid": ".read": "auth.uid == $ uid", ".write": "auth.uid == $ uid", "firstName" : ".validate": "newData.isString ()", "lastName": ".validate": "newData.isString ()", "age": ".validate": "newData.isNumber ( ) "," phoneNumber ": " .validate ":" newData.isString () && newData.val (). length == 11 ",
Aber wie vermeiden wir doppelte Telefonnummern??
Als Nächstes zeige ich Ihnen, wie Sie doppelte Telefonnummern vermeiden.
Als erstes müssen wir den Stammpfad so ändern, dass er eine Top-Ebene enthält /Telefonnummern/
Knoten. Wenn Sie einen neuen Benutzer erstellen, fügen wir diesem Knoten auch die Telefonnummer des Benutzers hinzu, wenn die Validierung erfolgreich ist. Unsere neue Datenstruktur sieht wie folgt aus:
"users": "user1": "firstName": "Chike", "lastName": "Mgbemena", "age": 89, "phoneNumber": "07012345678", "user2": "firstName" : "Godswill", "lastName": "Okwara", "age": 12, "phoneNumber": "06034345453", "user3": "firstName": "Onu", "lastName": "Emeka", " Alter ": 90," Telefonnummer ":" 09034564543 ", ...," Telefonnummer ": " 07012345678 ":" Benutzer1 "," 06034345453 ":" Benutzer2 "," 09034564543 ":" Benutzer3 ",…
Wir müssen die Sicherheitsregeln ändern, um die Datenstruktur durchzusetzen:
"rules": "users": "$ uid": … "phoneNumber": ".validate": "newData.isString () && newData.val (). length == 11 &&! root.child ('phoneNumbers'). child (newData.val ()). exists () ",
Hier stellen wir sicher, dass die Telefonnummer eindeutig ist, indem wir prüfen, ob sie bereits ein Kind des ist /Telefonnummern/
Knoten mit der angegebenen Telefonnummer als Schlüssel. Wir prüfen also, dass die Telefonnummer von einem Benutzer noch nicht registriert wurde. Wenn dies nicht der Fall ist, ist die Validierung erfolgreich und die Schreiboperation wird akzeptiert. Andernfalls wird sie abgelehnt.
Ihre App muss die Telefonnummer zur Liste der Telefonnummern hinzufügen, wenn Sie einen neuen Benutzer erstellen. Außerdem muss die Telefonnummer eines Benutzers gelöscht werden, wenn dieser Benutzer gelöscht wird.
Sie können Ihre Sicherheitsregeln in der Firebase-Konsole simulieren, indem Sie auf klicken Simulator Taste. Fügen Sie Ihre Sicherheitsregeln hinzu, wählen Sie den Simulationstyp aus (entweder lesen oder schreiben), geben Sie einige Daten mit einem Pfad ein und klicken Sie auf Lauf Taste:
Wenn der Wert des Vornamens eine Zahl anstelle einer Zeichenfolge ist, schlägt die Überprüfung fehl und der Schreibzugriff wird verweigert:
In diesem Kurztipp haben Sie die Sicherheitsregeln von Firebase Database kennengelernt: So können Sie den unberechtigten Zugriff auf Daten verhindern und sicherstellen, dass die Daten in der Datenbank strukturiert sind.
Weitere Informationen zu den Sicherheitsregeln von Firebase Database finden Sie in der offiziellen Dokumentation. Auf Envato Tuts finden Sie einige unserer anderen Firebase-Tutorials und -Kurse+!