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 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 Ihre Regeln aus dem Zugriff auf Firebase - Konsole , wählen Sie Ihr Projekt, wechseln Sie dann zu Echtzeit - Datenbank, Wolke Firestor oder Lagerung. Klicken Sie auf Regeln , wenn Sie in der richtigen Datenbank oder Speicher Eimer sind.

Um Ihre Regeln aus der Firebase CLI zuzugreifen, gehen Sie auf die Datei Regeln beachten , in Ihrer firebase.json Datei .

Verstehen Sie die Firebase-Sicherheitsregeln

Firebase-Sicherheitsregeln schützen Ihre Daten vor böswilligen Benutzern. Wenn Sie eine Datenbankinstanz oder Cloud Storage Eimer in der Konsole Firebase zu erstellen, können Sie entweder verweigern den Zugriff auf alle Benutzer (Locked - Modus) oder den Zugriff gewährt auf alle Benutzer (Test - Modus). 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.

Wie Sie Ihre App sind die Entwicklung und verschiedene Konfigurationen für Ihre Regeln zu testen, verwenden Sie eine der lokalen Firebase Emulatoren Ihre Anwendung 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: Die Regeln , die gelesen restrict und Schreibzugriff.

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 Benutzer mit Regeln zu authentifizieren .

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 einer Ihrer Regeln enthält auth != null , bestätigen Sie , dass jeder angemeldete Benutzer Zugriff auf die Daten zu haben.

Nicht empfohlen: Jeder angemeldete Benutzer verfügt über Lese- und Schreibzugriff auf die 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: Schmaler Zugang mit 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: Refining Regeln Kind Wege
{
  "rules": {
     "foo": {
        // allows read to /foo/*
        ".read": "data.child('baz').val() === true",
        "bar": {
          /* ignored, since read was allowed already */
          ".read": false
        }
     }
  }
}
Lösung: Schreibregeln auf übergeordnete Pfade , die breit sind, und gewähren spezifischere Privilegien auf Kind Pfade Wenn Ihre Datenzugriffsanforderungen mehr Granularität benötigen, Ihre Regeln halten körnig. Erfahren Sie mehr über Cascading Realtime Datenbank - Regeln in Sichern Sie Ihre Daten .

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.

Erfahren Sie mehr über Cloud - Firestor Sicherheit Regeln und wie sie in Arbeit Beginnen Sie mit Cloud - Firestor Sicherheitsregeln gestartet .

Testen Sie Ihre Cloud Firestore-Sicherheitsregeln

Um App-Verhalten zu überprüfen und bestätigen Sie Ihre Cloud - Firestor Sicherheitsregeln Konfigurationen, verwenden Sie die Firebase Emulator . Verwenden Sie den Cloud Firestore-Emulator, um Komponententests in einer lokalen Umgebung auszuführen und zu automatisieren, bevor Sie Änderungen bereitstellen.

Um schnell Firebase Sicherheitsregeln in der Firebase - Konsole verwenden , um die Validierung von Firebase Regeln Simulator .