RATGEBER · SICHERHEIT

Firebase-Regeln offen: so macht ihr Firestore und Storage dicht

Die Regel allow read, write: if true gibt jedem Zugriff. So erkennt ihr offene Firebase-Regeln und beschränkt sie auf angemeldete Nutzer oder Besitzer.

3 Min. LesezeitZuletzt geprüft am

Woran ihr offene Regeln erkennt

Während der Entwicklung sind offene Regeln bequem. Laut Firebase-Doku müsst ihr sie aber vor dem Livegang anpassen. Steht in euren Regeln allow read, write: if true, darf jeder lesen und schreiben.

Die Doku ist deutlich: Firebase Security Rules sind bei direktem Zugriff aus dem Client die einzige Schutzschicht gegen böswillige Nutzer.

Mindestens: nur angemeldete Nutzer

Die einfachste Verschärfung lässt nur angemeldete Nutzer zu: allow read, write: if request.auth != null. Das schützt vor anonymen Besuchern, aber nicht davor, dass ein Nutzer Daten anderer Nutzer sieht.

Besser: nur der Besitzer

Für Daten, die einem Nutzer gehören, vergleicht die Regel die Nutzer-ID der Anfrage mit der ID im Pfad: allow read, write: if request.auth != null && request.auth.uid == userId, mit userId aus dem Pfad. In Firestore passt dazu zum Beispiel ein Dokumentpfad wie match /nutzer/{userId}. Bei Storage steht die ID im Dateipfad.

Gemischt: öffentlich lesen, nur Besitzer ändern

Inhalte, die jeder lesen darf, die aber nur ihr Autor ändern soll, bekommen getrennte Regeln: Lesen für alle, dazu je eine Regel für create, update und delete. Beim Anlegen (create) vergleicht ihr request.auth.uid mit der Autoren-ID in den neuen Daten (request.resource.data), beim Ändern (update) mit der Autoren-ID der bestehenden und der neuen Daten, damit niemand den Besitzer wechseln kann, und beim Löschen (delete) mit der bestehenden (resource.data).

Regeln vor dem Livegang testen

Mit der Firebase Local Emulator Suite lassen sich Security Rules lokal prüfen und Tests automatisieren, bevor ihr sie veröffentlicht.

Typische Fehler

Diese Fehler ergeben sich aus der Firebase-Doku:

  • Die Regeln des Testmodus im Livebetrieb lassen. Im Testmodus darf laut Doku jeder auf die Daten zugreifen, deshalb gehören die Regeln vor dem Livegang angepasst.
  • Sich darauf verlassen, dass die App schon prüft. Die Doku beschreibt es umgekehrt: Clients sind nicht für die Durchsetzung der Sicherheit zuständig, das übernehmen die Regeln.
  • Nur request.auth != null verlangen, obwohl die Daten einzelnen Nutzern gehören. Dann sieht jeder angemeldete Nutzer die Daten aller anderen. Vergleicht in diesem Fall die Nutzer-ID.
  • Regeln veröffentlichen, ohne sie vorher zu testen. Die Emulator Suite prüft sie lokal.

Beispiel: erst alles sperren, dann gezielt öffnen

Aus der Firebase-Doku: Die Standardregeln des gesperrten Modus verweigern in Cloud Firestore jeden Zugriff. Darauf baut ihr auf und erlaubt nur, was eure App braucht, zum Beispiel den Zugriff auf Dokumente eines Nutzers unter dessen eigener ID:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
    match /users/{userId} {
      allow read, write: if request.auth != null && request.auth.uid == userId;
    }
  }
}

Häufige Fragen

Was bedeutet allow read, write: if true?

Jeder darf lesen und schreiben, auch ohne Anmeldung. Die Regel ist nur für die Entwicklung gedacht.

Was bewirkt der gesperrte Modus?

Laut Doku verweigern seine Standardregeln in Cloud Firestore und in der Realtime Database jeden Zugriff. Ihr öffnet dann gezielt, was eure App braucht.

Reicht request.auth != null?

Es hält anonyme Besucher fern, aber nicht Nutzer voneinander. Gehören die Daten einzelnen Nutzern, vergleicht request.auth.uid mit der Nutzer-ID im Pfad.

Wie teste ich die Regeln, ohne live zu gehen?

Mit der Firebase Local Emulator Suite. Sie prüft Security Rules lokal und lässt Tests automatisch laufen.

Quellen

EURE APP PRÜFEN

Eure App prüfen

Der kostenlose Check lädt eure App wie ein Besucher und zeigt, was von außen sichtbar ist. Ihr bestätigt vorher, dass ihr die App verantwortet oder zur Prüfung befugt seid.

Weitere Ratgeber

Alle Ratgeber →