In diesem Leitfaden erfahren Sie mehr über häufige Sicherheitslücken in Firebase Security Rules Ihre eigenen Regeln prüfen und schützen, und testen Sie Ihre Änderungen, bevor Sie sie übernehmen.
Wenn Sie eine Benachrichtigung erhalten, dass Ihre Daten nicht ordnungsgemäß gesichert sind, Prüfen Sie diese häufigen Fehler und aktualisieren Sie alle anfälligen Regeln.
Auf Firebase Security Rules zugreifen
Verwenden Sie zum Aufrufen Ihrer vorhandenen Rules entweder die Firebase-Befehlszeile oder die Firebase-Konsole. Achten Sie darauf, dass Sie Ihre Regeln mit derselben Methode bearbeiten, um das versehentliche Überschreiben von Updates zu vermeiden. Wenn Sie sich nicht sicher sind ob Ihre lokal definierten Regeln den neuesten Aktualisierungen entsprechen, In der Console wird immer die zuletzt bereitgestellte Version von Firebase Security Rules angezeigt.
Um über die Firebase-Konsole auf Ihre Regeln zuzugreifen, wählen Sie Ihr und gehen Sie dann zu Realtime Database, Cloud Firestore oder Speicher. Klicken Sie auf Regeln, sobald Sie sich in der richtigen Datenbank oder im richtigen Speicher befinden. Bucket.
Wenn Sie über die Firebase-Befehlszeile auf Ihre Regeln zugreifen möchten, gehen Sie zur Regeldatei, die in der firebase.json-Datei notiert ist.
Informationen zu Firebase Security Rules
Firebase Security Rules schützt Ihre Daten vor böswilligen Nutzern. Beim Erstellen einer Datenbank oder Cloud Storage-Bucket in der Firebase-Konsole haben, können Sie Sie können entweder den Zugriff für alle Nutzer verweigern (Sperrmodus) oder den Zugriff gewähren für für alle Nutzer (Testmodus) Während Sie währenddessen nehmen Sie sich die Zeit, Ihre Regeln richtig zu konfigurieren und Ihre Daten vor der Bereitstellung zu schützen.
Wenn Sie die App entwickeln und verschiedene Konfigurationen testen, verwenden Sie einen der lokalen Firebase-Emulatoren zum Ausführen Ihrer App in einer lokalen Entwicklungsumgebung.
Häufige Szenarien mit unsicheren Regeln
Die Rules, die Sie möglicherweise standardmäßig oder wie ursprünglich sollten Sie überprüfen und aktualisieren, bevor Sie Ihre Anwendung bereitstellen. Sorgen Sie dafür, dass die Daten indem Sie die folgenden häufigen Fallstricke vermeiden.
Unbeschränkter Zugriff
Beim Einrichten Ihres Firebase-Projekts haben Sie möglicherweise Regeln festgelegt, während der Entwicklung. 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: Lese- und Schreibzugriff für alle Nutzer.
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 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: 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 Nutzer mit Regeln authentifizieren Cloud FirestoreRealtime DatabaseCloud Storage |
Zugriff für jeden authentifizierten Nutzer
Manchmal prüft Rules, ob ein Nutzer angemeldet ist, aber du kannst es nicht
den Zugriff auf der Grundlage dieser Authentifizierung einschränken. Wenn eine Ihrer Regeln auth != null
enthält, haben alle angemeldeten Nutzer Zugriff auf die Daten.
Nicht empfohlen:Jeder angemeldete Nutzer hat
und Schreibzugriff auf Ihre gesamte Datenbank.
Cloud Firestoreservice 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 Authentifizierungseigenschaften. Cloud FirestoreRealtime DatabaseCloud Storage |
(Realtime Database) Falsch übernommene Regeln
Kaskade von Realtime Database Security Rules mit Regeln für flachere, übergeordnete Pfade, die Vorrang vor Regeln haben auf untergeordneten Knoten zu erstellen. Wenn Sie eine Regel in einem untergeordneten Knoten schreiben, denken Sie daran, dass es nur zusätzliche Berechtigungen gewähren kann. Sie können keine Verfeinerung oder Aufhebung vornehmen Zugriff auf Daten in einem tieferen Pfad in Ihrer Datenbank haben.
Nicht empfohlen:Regeln in untergeordneten Pfaden optimieren
{ "rules": { "foo": { // allows read to /foo/* ".read": "data.child('baz').val() === true", "bar": { /* ignored, since read was allowed already */ ".read": false } } } } |
Lösung:Regeln in übergeordneten Pfaden schreiben die weit gefasst sind und spezifischere Berechtigungen bei untergeordneten Pfaden gewähren Wenn Ihre Datenzugriffsanforderungen einen höheren Detaillierungsgrad erfordern, halten Sie Ihre Regeln detailliert. Weitere Informationen zu kaskadierenden Realtime Database Security Rules in 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 nur als Server in Verbindung mit Firebase Admin SDK. 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 in Erste Schritte mit Cloud Firestore Security Rules.
Cloud Firestore Security Rules testen
Verwenden Sie den Firebase-Emulator, um das Verhalten Ihrer Anwendung und die Konfigurationen Ihrer Cloud Firestore Security Rules zu prüfen. Cloud Firestore verwenden Emulator, um Einheitentests vor der Bereitstellung in einer lokalen Umgebung auszuführen und zu automatisieren Änderungen vornehmen.
Um Firebase Security Rules schnell in der Firebase-Konsole zu validieren, verwenden Sie Firebase-Regelsimulator