Firebase Security Rules: lass deine Datenbank nicht offen
Firebase-Web-Apps lesen und schreiben Firestore, Realtime Database und Cloud Storage direkt aus dem Browser — mit einem Config-Objekt, das jeder sehen kann. Security Rules sind das Einzige, was entscheidet, ob eine Anfrage erlaubt ist. Rules, die im Test-Modus bleiben oder so gelockert werden, dass sie alles erlauben, legen deine gesamte Datenbank offen fürs Internet.
Was es ist
Security Rules sind eine kleine Policy-Sprache, die bei jedem Lese- und Schreibzugriff auf Googles Servern ausgewertet wird. Jeder match-Block zielt auf einen Pfad — eine Collection, ein Dokument, einen Storage-Ordner —, und allow-Anweisungen legen fest, welche Operationen unter welchen Bedingungen erlaubt sind, anhand von request.auth (wer fragt) und request.resource.data (was geschrieben werden soll).
Die Firebase-Web-Config samt apiKey identifiziert nur dein Projekt; sie ist kein Secret und gewährt für sich genommen keinen Zugriff. Genau deshalb sind die Rules so wichtig: Jeder Besucher kann das Firebase SDK mit deiner Config initialisieren und deine Datenbank direkt aus seiner Browser-Konsole abfragen.
Warum es wichtig ist
Der Test-Modus von Firestore erlaubt alle Lese- und Schreibzugriffe bis zu einem Ablaufdatum. Ist die Frist erreicht und die App funktioniert nicht mehr, lautet ein verbreiteter „Fix“ allow read, write: if true — womit jedes Dokument für die ganze Welt les- und beschreibbar ist. Offene Firebase-Datenbanken sind eine wiederkehrende Quelle großer Datenlecks und lassen sich trivial finden und abziehen.
Rules, die nur request.auth != null prüfen, sind kaum besser: Jeder kann ein Konto anlegen, oft sogar anonym, und dann die Daten aller Nutzer lesen. Ohne Validierung der Schreibzugriffe können Nutzer außerdem Felder ändern, die sie nie kontrollieren dürften — etwa role: "admin" im eigenen Profil setzen.
So behebst du es
Verweigere standardmäßig alles und gewähre Zugriff pro Collection. Hier kann jeder Nutzer nur sein eigenes Dokument in users lesen und schreiben, alles andere ist nicht erreichbar.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read, write: if request.auth != null
&& request.auth.uid == userId;
}
// Every other path is denied by default.
}
}Beschränke, welche Felder ein Nutzer ändern darf, damit er sich nicht selbst höhere Rechte gibt oder serververwaltete Daten manipuliert. affectedKeys().hasOnly() lehnt jedes Update ab, das andere Felder berührt.
match /users/{userId} {
allow update: if request.auth.uid == userId
&& request.resource.data.diff(resource.data)
.affectedKeys().hasOnly(["displayName", "photoURL"]);
}Durchsuche deine Rules nach match /{document=**} in Kombination mit einem breiten allow, nach if true und nach ablaufenden Test-Modus-Zeitstempeln. Denk daran, dass Cloud Storage und Realtime Database eigene Rules-Dateien haben — sichere auch diese ab.
Nutze den Rules Playground in der Firebase-Konsole oder die Emulator Suite mit @firebase/rules-unit-testing, um Lesezugriffe als nicht authentifizierter Nutzer und als anderer angemeldeter Nutzer auszuführen. Ein schneller externer Check ist ein nicht authentifizierter REST-Request — liefert er Dokumente zurück, ist die Collection öffentlich.
curl "https://firestore.googleapis.com/v1/projects/<project-id>/databases/(default)/documents/users"FAQ
Ist mein Firebase apiKey ein Secret?
Nein. Der apiKey in der Firebase-Web-Config identifiziert dein Projekt und ist dafür gedacht, an den Browser ausgeliefert zu werden. Schütze deine Daten mit Security Rules und beschränke den Key in Google Cloud auf die APIs, die deine App tatsächlich nutzt, damit er nicht für andere kostenpflichtige Google-Dienste wiederverwendet werden kann.
Reicht request.auth != null aus?
Selten. Es beweist nur, dass der Anfragende angemeldet ist — nicht, dass ihm die Daten gehören. Vergleiche request.auth.uid mit dem Eigentümer des Dokuments oder prüfe eine Rolle, die Nutzer nicht selbst setzen können.
Prüft AppSafe meine Firebase Rules?
AppSafe fragt dein Firebase-Projekt nicht ab und kann deine Rules daher nicht auswerten — nutze den Rules Playground oder den curl-Check oben. Es meldet aber Google-API-Keys (im Format AIza…), die in deinem JavaScript gefunden werden, weil dasselbe Format auch für kostenpflichtige Dienste wie Maps oder Gemini verwendet wird. Bei einer Firebase-Web-Config ist das zu erwarten; stelle nur sicher, dass der Key eingeschränkt ist.
Ist deine App betroffen?
AppSafe prüft dies und Dutzende weitere Probleme in einem kostenlosen Scan.
Meine App gratis scannenVerwandte Guides
Supabase Row Level Security (RLS): sichere deine Tabellen ab
Dein anon key ist öffentlich. RLS ist das Einzige, was zwischen ihm und deinen Daten steht.
API-Keys, die in clientseitigem JavaScript offengelegt sind
Alles in deinem Bundle ist öffentlich. Behandle es entsprechend.
Offene Datenbank-Backups: was passiert, wenn /backup.sql erreichbar ist
Ein erreichbarer .sql-Dump ist die komplette Übergabe deiner gesamten Datenbank.