Korrigieren Sie unsichere Regeln

Verwenden Sie diesen Leitfaden, um häufige Schwachstellen in Cloud Firestore-Sicherheitsregelkonfigurationen 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 Cloud Firestore-Datenbank nicht ordnungsgemäß gesichert ist, können Sie die Schwachstellen beheben, indem Sie Ihre Cloud Firestore-Sicherheitsregeln ändern und testen.

Um Ihre vorhandenen Sicherheitsregeln anzuzeigen, gehen Sie in der Firebase-Konsole zur Registerkarte „Regeln“ .

Verstehen Sie Ihre Cloud Firestore-Sicherheitsregeln

Cloud Firestore-Sicherheitsregeln schützen Ihre Daten vor böswilligen Benutzern. Die Standardregeln für jede in der Firebase-Konsole erstellte Cloud Firestore-Instanz verweigern allen Benutzern den Zugriff. Um Ihre App zu entwickeln und auf Ihre Datenbank zuzugreifen, müssen Sie diese Regeln ändern und möglicherweise allen Benutzern in einer Entwicklungsumgebung pauschalen Zugriff gewähren. Bevor Sie Ihre App jedoch in einer Produktionsumgebung bereitstellen, nehmen Sie sich die Zeit, Ihre Regeln ordnungsgemäß zu konfigurieren und Ihre Daten zu sichern.

Während Sie Ihre App entwickeln und verschiedene Konfigurationen für Ihre Regeln testen, verwenden Sie den Cloud Firestore-Emulator, um Ihre App in einer lokalen Entwicklungsumgebung auszuführen.

Häufige Szenarien mit unsicheren Regeln

Die Cloud Firestore-Sicherheitsregeln, die Sie möglicherweise standardmäßig oder bei der anfänglichen Entwicklung Ihrer App mit Cloud Firestore eingerichtet haben, sollten überprüft und aktualisiert werden, bevor Sie Ihre App bereitstellen. Stellen Sie sicher, dass Sie die Daten Ihrer Benutzer ordnungsgemäß schützen, indem Sie die folgenden häufigen Fallstricke vermeiden.

Offener Zugang

Beim Einrichten von Cloud Firestore haben Sie möglicherweise Ihre Regeln so festgelegt, dass während der Entwicklung offener Zugriff möglich ist. Sie denken vielleicht, dass Sie die einzige Person sind, die Ihre App nutzt, 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.
// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this rule set in production; it allows
// anyone to overwrite your entire database.

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}
Lösung: Regeln, die den Lese- und Schreibzugriff einschränken.

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

Nur Inhaltseigentümer

service cloud.firestore {
  match /databases/{database}/documents {
    // Allow only authenticated content owners access
    match /some_collection/{document} {
      allow read, write: if request.auth != null && request.auth.uid == request.resource.data.author_uid
    }
  }
}
  

Gemischter öffentlicher und privater Zugang

service cloud.firestore {
  match /databases/{database}/documents {
    // Allow public read access, but only content owners can write
    match /some_collection/{document} {
      allow read: if true
      allow write: if request.auth != null && request.auth.uid == request.resource.data.author_uid
    }
  }
}
  

Zugriff für jeden authentifizierten Benutzer

Manchmal überprüfen die Cloud Firestore-Sicherheitsregeln, ob ein Benutzer angemeldet ist, schränken den Zugriff jedoch nicht weiter auf der Grundlage dieser Authentifizierung ein. Wenn eine Ihrer Regeln auth != null enthält, bestätigen Sie, dass jeder angemeldete Benutzer Zugriff auf die Daten haben soll.

Nicht empfohlen: Jeder angemeldete Benutzer hat Lese- und Schreibzugriff auf Ihre gesamte Datenbank.
service cloud.firestore {
  match /databases/{database}/documents {
    match /some_collection/{document} {
      allow read, write: if request.auth != null;
    }
  }
}
Lösung: Enger Zugang unter Verwendung von Sicherheitsbedingungen.

Wenn Sie die Authentifizierung prü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 das Hinzufügen von Sicherheitsbedingungen und rollenbasierten Zugriff .

Rollenbasierter Zugriff

service cloud.firestore {
  match /databases/{database}/documents {
    // Assign roles to all users and refine access based on user roles
    match /some_collection/{document} {
     allow read: if request.auth != null && get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Reader"
     allow write: if request.auth != null && get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Writer"

     // Note: Checking for roles in your database using `get` (as in the code
     // above) or `exists` carry standard charges for read operations.
    }
  }
}

Attributbasierter Zugriff

// Give each user in your database a particular attribute
// and set it to true/false
// Then, use that attribute to grant access to subsets of data
// For example, an "admin" attribute set
// to "true" grants write access to data

service cloud.firestore {
  match /databases/{database}/documents {
    match /collection/{document} {
      allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true;
      allow read: true;
    }
  }
}
  

Gemischter öffentlicher und privater Zugang

service cloud.firestore {
  match /databases/{database}/documents {
    // Allow public read access, but only content owners can write
    match /some_collection/{document} {
      allow read: if true
      allow write: if request.auth.uid == request.resource.data.author_uid
    }
  }
}
  

Geschlossener Zugang

Während Sie Ihre App entwickeln, besteht ein weiterer gängiger Ansatz darin, Ihre Daten gesperrt zu halten. Normalerweise bedeutet dies, dass Sie den Lese- und Schreibzugriff für alle Benutzer wie folgt gesperrt haben:

// Deny read/write access to all users under any conditions
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      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 als reines Server-Backend 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 ihrer Funktionsweise finden Sie unter „Erste Schritte mit Cloud Firestore-Sicherheitsregeln“ .

Überprüfen Sie Ihre Cloud Firestore-Sicherheitsregeln

Um das Verhalten Ihrer App zu überprüfen und Ihre Cloud Firestore-Sicherheitsregelkonfigurationen zu überprüfen, verwenden Sie den Cloud Firestore-Emulator . Verwenden Sie den Cloud Firestore-Emulator, um Komponententests in einer lokalen Umgebung auszuführen und zu automatisieren, bevor Sie Änderungen bereitstellen.

Um Ihre aktualisierten Cloud Firestore-Sicherheitsregeln schnell in der Firebase-Konsole zu testen, verwenden Sie das Rules Playground-Tool.

  1. Um den Rules Playground zu öffnen, klicken Sie auf der Registerkarte „Regeln“ auf Rules Playground .
  2. Wählen Sie in den Einstellungen des Regelspielplatzes Optionen für Ihren Test aus, darunter:
    • Testen von Lese- oder Schreibvorgängen
    • Ein bestimmter Speicherort in Ihrer Datenbank als Pfad
    • Authentifizierungstyp – nicht authentifizierter, authentifizierter anonymer Benutzer oder eine bestimmte Benutzer-ID
    • Dokumentspezifische Daten, auf die Ihre Regeln speziell verweisen (z. B. wenn Ihre Regeln das Vorhandensein eines bestimmten Felds erfordern, bevor ein Schreibvorgang zulässig ist)
  3. Klicken Sie auf „Ausführen“ und suchen Sie im Banner über dem Regelfenster nach den Ergebnissen.