Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

Vermeiden Sie unsichere Regeln

Verwenden Sie diesen Leitfaden, um allgemeine Sicherheitslücken in Konfigurationen von Firebase-Sicherheitsregeln zu verstehen, Ihre eigenen Regeln zu überprüfen und besser zu sichern und Ihre Änderungen zu testen, bevor Sie sie bereitstellen.

Wenn Sie eine Warnung erhalten, dass Ihre Daten nicht ordnungsgemäß gesichert sind, überprüfen Sie diese häufig auftretenden Fehler und aktualisieren Sie alle anfälligen Regeln.

Greifen Sie auf Ihre Firebase-Sicherheitsregeln zu

Verwenden Sie zum Anzeigen Ihrer vorhandenen Regeln entweder die Firebase-CLI oder die Firebase-Konsole. Stellen Sie sicher, dass Sie Ihre Regeln konsistent mit derselben Methode bearbeiten, um ein versehentliches Überschreiben von Updates zu vermeiden. Wenn Sie sich nicht sicher sind, ob Ihre lokal definierten Regeln die neuesten Updates widerspiegeln, zeigt die Firebase-Konsole immer die zuletzt bereitgestellte Version Ihrer Firebase-Sicherheitsregeln an.

Um über die Firebase Console auf Ihre Regeln zuzugreifen, wählen Sie Ihr Projekt aus und navigieren Sie dann zu Realtime Database , Cloud Firestore oder Storage . Klicken Sie auf Regeln, sobald Sie sich in der richtigen Datenbank oder im richtigen Speicher-Bucket befinden.

Um über die Firebase-CLI auf Ihre Regeln zuzugreifen, rufen Sie die Regeldatei in Ihrer Datei firebase.json auf .

Firebase-Sicherheitsregeln verstehen

Firebase-Sicherheitsregeln schützen Ihre Daten vor böswilligen Benutzern. Wenn Sie in der Firebase Console eine Datenbankinstanz oder einen Cloud Storage-Bucket erstellen, können Sie entweder allen Nutzern den Zugriff verweigern ( gesperrter Modus ) oder allen Nutzern den Zugriff gewähren ( Testmodus ). Auch wenn Sie während der Entwicklung möglicherweise eine offenere Konfiguration wünschen, sollten Sie sich die Zeit nehmen, Ihre Regeln richtig zu konfigurieren und Ihre Daten zu sichern, bevor Sie Ihre App bereitstellen.

Wenn Sie Ihre App entwickeln und verschiedene Konfigurationen für Ihre Regeln testen, verwenden Sie einen der lokalen Firebase-Emulatoren , um Ihre App in einer lokalen Entwicklungsumgebung auszuführen.

Häufige Szenarien mit unsicheren Regeln

Die Regeln, die Sie möglicherweise standardmäßig eingerichtet haben oder als Sie ursprünglich an der Entwicklung Ihrer App gearbeitet haben, sollten vor der Bereitstellung Ihrer App überprüft und aktualisiert werden. Stellen Sie sicher, dass Sie die Daten Ihrer Benutzer ordnungsgemäß schützen, indem Sie die folgenden häufigen Fallstricke vermeiden.

Uneingeschränkter Zugang

Beim Einrichten Ihres Firebase-Projekts haben Sie möglicherweise Ihre Regeln festgelegt, um während der Entwicklung offenen Zugriff zuzulassen. Sie denken vielleicht, dass Sie die einzige Person sind, die Ihre App verwendet, aber wenn Sie sie bereitgestellt haben, ist sie im Internet verfügbar. Wenn Sie keine Benutzer authentifizieren und keine Sicherheitsregeln konfigurieren, kann jeder, der Ihre Projekt-ID errät, die Daten stehlen, ändern oder löschen.

Nicht empfohlen: Lese- und Schreibzugriff für alle Benutzer.

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;
    }
  }
}

Echtzeit-Datenbank

{
  // 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-Speicher

// 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 via 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: Regeln, die den Lese- und Schreibzugriff einschränken.

Erstellen Sie Regeln, die für Ihre Datenhierarchie sinnvoll sind. Eine der häufigsten Lösungen für diese Unsicherheit ist die benutzerbasierte Sicherheit mit Firebase Authentication. Erfahren Sie mehr über die Authentifizierung von Benutzern mit Regeln .

Cloud Firestore

Echtzeit-Datenbank

Cloud-Speicher

Zugriff für jeden authentifizierten Benutzer

Manchmal überprüfen Regeln, ob ein Benutzer angemeldet ist, schränken den Zugriff jedoch basierend auf dieser Authentifizierung nicht weiter ein. Wenn eine Ihrer Regeln auth != null , bestätigen Sie, dass alle angemeldeten Benutzer Zugriff auf die Daten haben sollen.

Nicht empfohlen: Jeder angemeldete Benutzer 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;
    }
  }
}

Echtzeit-Datenbank

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

Cloud-Speicher

// 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: Eingeschränkter Zugriff unter Verwendung von Sicherheitsbedingungen.

Wenn Sie die Authentifizierung überprüfen, möchten Sie möglicherweise auch eine der Authentifizierungseigenschaften verwenden, um den Zugriff auf bestimmte Benutzer für bestimmte Datensätze weiter einzuschränken. Erfahren Sie mehr über die verschiedenen Authentifizierungseigenschaften .

Cloud Firestore

Echtzeit-Datenbank

Cloud-Speicher

(Echtzeitdatenbank) Falsch übernommene Regeln

Echtzeit-Datenbankregeln kaskadieren, mit Regeln an flacheren, übergeordneten Pfaden, die Regeln an tieferen untergeordneten Knoten überschreiben. Denken Sie beim Schreiben einer Regel an einem untergeordneten Knoten daran, dass dieser nur zusätzliche Berechtigungen gewähren kann. Sie können den Zugriff auf Daten in einem tieferen Pfad in Ihrer Datenbank nicht verfeinern oder widerrufen.

Nicht empfohlen: Regeln für untergeordnete Pfade 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 weit gefasste Regeln für übergeordnete Pfade und gewähren Sie spezifischere Berechtigungen für untergeordnete Pfade. Wenn Ihre Datenzugriffsanforderungen mehr Granularität erfordern, sollten Sie Ihre Regeln granular halten. Erfahren Sie mehr über die Kaskadierung von Echtzeit-Datenbankregeln in Secure Your Data .

Geschlossener Zugang

Während Sie Ihre App entwickeln, besteht ein weiterer gängiger Ansatz darin, Ihre Daten zu sperren. Normalerweise bedeutet dies, dass Sie den Lese- und Schreibzugriff für alle Benutzer wie folgt 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;
    }
  }
}

Echtzeit-Datenbank

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

Cloud-Speicher

// 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 können weiterhin auf Ihre Datenbank zugreifen. Verwenden Sie diese Regeln, wenn Sie Cloud Firestore oder Realtime Database als reines Server-Back-End in Verbindung mit dem Firebase Admin SDK verwenden möchten. Obwohl es sicher ist, sollten Sie testen, ob die Clients Ihrer App Daten ordnungsgemäß abrufen können.

Weitere Informationen zu Cloud Firestore-Sicherheitsregeln und deren Funktionsweise finden Sie unter Erste Schritte mit Cloud Firestore-Sicherheitsregeln .

Testen Sie Ihre Cloud Firestore-Sicherheitsregeln

Verwenden Sie den Firebase-Emulator , um das Verhalten Ihrer App und die Konfigurationen Ihrer Cloud Firestore-Sicherheitsregeln zu überprüfen. Verwenden Sie den Cloud Firestore-Emulator, um Komponententests in einer lokalen Umgebung auszuführen und zu automatisieren, bevor Sie Änderungen bereitstellen.

Verwenden Sie den Firebase Rules Simulator , um Firebase-Sicherheitsregeln in der Firebase-Konsole schnell zu validieren.