Unsichere Regeln vermeiden

In diesem Leitfaden finden Sie Informationen zu häufigen Sicherheitslücken in Firebase Security Rules Konfigurationen. Sie erfahren, wie Sie Ihre Regeln prüfen, deren Sicherheit erhöhen und Änderungen vor dem Bereitstellen testen.

Wenn Sie eine Warnung erhalten, dass Ihre Daten nicht ordnungsgemäß geschützt sind, prüfen Sie diese häufigen Fehler und aktualisieren Sie alle anfälligen Regeln.

Auf Firebase Security Rules zugreifen

Sie können Ihre vorhandenen Security Rules entweder über die Firebase CLI oder die Firebase Console aufrufen. Bearbeiten Sie Ihre Regeln immer mit derselben Methode, um zu vermeiden, dass Sie Aktualisierungen versehentlich überschreiben. Wenn Sie nicht sicher sind, ob Ihre lokal definierten Regeln die neuesten Aktualisierungen enthalten, wird in der Firebase Console immer die zuletzt bereitgestellte Version Ihrer Firebase Security Rules angezeigt.

Wenn Sie über die Firebase Console auf Ihre Regeln zugreifen möchten, wählen Sie Ihr Projekt aus und rufen Sie dann Realtime Database, Cloud Firestore oder Storage auf. Klicken Sie auf Regeln , sobald Sie sich in der richtigen Datenbank oder dem richtigen Storage-Bucket befinden.

Wenn Sie über die Firebase CLI auf Ihre Regeln zugreifen möchten, rufen Sie die Regeldatei auf, die in der Datei firebase.json vermerkt ist.

Firebase Security Rules

Firebase Security Rules schützen Ihre Daten vor böswilligen Nutzern. Wenn Sie in der Firebase Console eine Datenbank instanz oder einen Cloud Storage Bucket erstellen, können Sie entweder den Zugriff für alle Nutzer verweigern (Gesperrter Modus) oder allen Nutzern Zugriff gewähren (Testmodus). Während der Entwicklung ist eine offenere Konfiguration möglicherweise sinnvoll. Sie sollten sich jedoch die Zeit nehmen, Ihre Regeln entsprechend zu konfigurieren und Ihre Daten zu schützen, bevor Sie Ihre Anwendung bereitstellen.

Wenn Sie Ihre Anwendung entwickeln und verschiedene Konfigurationen für Ihre Regeln testen möchten, können Sie die Anwendung mit einem der lokalen Firebase-Emulatoren in einer lokalen Entwicklungsumgebung ausführen.

Häufige Szenarien mit unsicheren Regeln

Die Security Rules die möglicherweise standardmäßig gelten oder die Sie bei der anfänglichen Entwicklung Ihrer Anwendung eingerichtet haben, sollten vor der Bereitstellung geprüft und aktualisiert werden. Achten Sie darauf, dass die Daten Ihrer Nutzer ordnungsgemäß geschützt sind und vermeiden Sie dazu die im Folgenden aufgeführten häufigen Fehler.

Unbeschränkter Zugriff

Bei der Einrichtung Ihres Firebase-Projekts haben Sie möglicherweise Regeln festgelegt, die während der Entwicklung unbeschränkten Zugriff zulassen. Eventuell gehen Sie auch davon aus, dass Sie die einzige Person sind, die Ihre Anwendung nutzt. Allerdings ist sie nach dem Bereitstellen im Internet verfügbar. Wenn Sie Nutzer nicht authentifizieren und keine Sicherheitsregeln konfigurieren, kann jeder, der Ihre Projekt-ID errät, die Daten stehlen, ändern oder löschen.

Nicht empfohlen: Alle Nutzer haben Lese- und Schreibzugriff.

Cloud Firestore

// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this ruleset in production; it allows
// anyone to overwrite your entire database.

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

Realtime Database

{
  // Allow read/write access to all users under any conditions
  // Warning: **NEVER** use this ruleset in production; it allows
  // anyone to overwrite your entire database.

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

Cloud Storage

// Anyone can read or write to the bucket, even non-users of your app.
// Because it is shared with App Engine, this will also make
// files uploaded using App Engine public.
// Warning: This rule makes every file in your Cloud Storage bucket accessible to any user.
// Apply caution before using it in production, since it means anyone
// can overwrite all your files.

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}
    
Lösung: Legen Sie Regeln fest, die den Lese- und Schreibzugriff beschränken.

Erstellen Sie Regeln, die für Ihre Datenhierarchie sinnvoll sind. Eine der gängigsten Lösungen für diese unsichere Konfiguration ist die nutzerbasierte Sicherheit mit Firebase Authentication. Weitere Informationen dazu finden Sie unter Nutzer mit Regeln authentifizieren.

Cloud Firestore

Realtime Database

Cloud Storage

Zugriff für jeden authentifizierten Nutzer

Manchmal prüfen Security Rules, ob ein Nutzer angemeldet ist, schränken jedoch den Zugriff anhand dieser Authentifizierung nicht weiter ein. Wenn eine Ihrer Regeln auth != null enthält, haben alle angemeldeten Nutzer Zugriff auf die Daten.

Nicht empfohlen: Jeder angemeldete Nutzer hat Lese und Schreibzugriff auf Ihre gesamte Datenbank.

Cloud Firestore

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

Realtime Database

{
  "rules": {
    ".read": "auth.uid !== null",
    ".write": "auth.uid !== null"
  }
}

Cloud Storage

// Only authenticated users can read or write to the bucket
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}
Lösung: Grenzen Sie den Zugriff mithilfe von Sicherheitsbedingungen ein.

Wenn Sie die Authentifizierung prüfen lassen, können Sie auch eines der Authentifizierungsattribute verwenden, um den Zugriff für bestimmte Nutzer und bestimmte Datensätze weiter einzuschränken. Weitere Informationen zu den verschiedenen Authentifizierungsattributen.

Cloud Firestore

Realtime Database

Cloud Storage

(Realtime Database) Falsch übernommene Regeln

Realtime Database Security Rules werden kaskadiert. Regeln in flacheren übergeordneten Pfaden überschreiben Regeln in tieferen untergeordneten Knoten. Wenn Sie eine Regel in einem untergeordneten Knoten schreiben, können Sie damit nur zusätzliche Berechtigungen gewähren. Sie können den Zugriff auf Daten in einem tieferen Pfad in Ihrer Datenbank nicht verfeinern oder widerrufen.

Nicht empfohlen: Regeln in untergeordneten Pfaden verfeinern
{
  "rules": {
     "foo": {
        // allows read to /foo/*
        ".read": "data.child('baz').val() === true",
        "bar": {
          /* ignored, since read was allowed already */
          ".read": false
        }
     }
  }
}
Lösung: Schreiben Sie Regeln in übergeordneten Pfaden die breit gefasst sind, und gewähren Sie spezifischere Berechtigungen in untergeordneten Pfaden Wenn Ihre Datenzugriffsanforderungen mehr Granularität erfordern, sollten Sie Ihre Regeln entsprechend gestalten. Weitere Informationen zum Kaskadieren von Realtime Database Security Rules finden Sie unter Kern syntax von Realtime Database Security Rules.

Geschlossener Zugriff

Ein weiterer gängiger Ansatz während der Entwicklung Ihrer Anwendung besteht darin, Ihre Daten zu sperren. In der Regel bedeutet dies, dass Sie den Lese- und Schreibzugriff für alle Nutzer folgendermaßen gesperrt haben:

Cloud Firestore

// Deny read/write access to all users under any conditions
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

Realtime Database

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

Cloud Storage

// Access to files through Cloud Storage is completely disallowed.
// Files may still be accessible through App Engine or Google Cloud Storage APIs.

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if false;
    }
  }
}

Die Firebase Admin SDKs und Cloud Functions haben aber weiterhin Zugriff auf Ihre Datenbank. Verwenden Sie diese Regeln, wenn Sie Cloud Firestore oder Realtime Database zusammen mit dem Firebase Admin SDK als Server-Only Back-End verwenden möchten. Dies ist zwar sicher, Sie müssen aber testen, ob die Clients Ihrer Anwendung Daten ordnungsgemäß abrufen können.

Weitere Informationen zu Cloud Firestore Security Rules und ihrer Funktionsweise finden Sie unter Erste Schritte mit Cloud Firestore Security Rules.

Cloud Firestore Security Rules testen

Mit dem Firebase-Emulator können Sie das Verhalten Ihrer Anwendung und Ihre Cloud Firestore Security Rules Konfigurationen prüfen. Verwenden Sie den Cloud Firestore Emulator, um Einheitentests in einer lokalen Umgebung auszuführen und zu automatisieren, bevor Sie Änderungen vornehmen.

Verwenden Sie den Firebase-Regelsimulator, um Firebase Security Rules schnell in der Firebase Console zu validieren.