Firebase-Sicherheitscheckliste

Damit Ihre Firebase-Ressourcen und die Daten Ihrer Nutzer geschützt sind, sollten Sie diese Richtlinien befolgen. Nicht alle Punkte sind unbedingt auf Ihre Anforderungen anwendbar, aber Sie sollten sie bei der Entwicklung Ihrer App im Hinterkopf behalten.

Missbräuchlichen Traffic vermeiden

Monitoring und Benachrichtigungen für Backend-Dienste einrichten

Wenn Sie missbräuchlichen Traffic wie Denial-of-Service-Angriffe (DoS) erkennen möchten, richten Sie Monitoring und Benachrichtigungen für Cloud Firestore, Realtime Database, Cloud Storage und Hosting ein.

Wenn Sie einen Angriff auf Ihre Anwendung vermuten, wenden Sie sich so schnell wie möglich an den Support und informieren Sie ihn über die Situation.

Aktivieren App Check

Damit nur Ihre Apps auf Ihre Back-End-Dienste zugreifen können, aktivieren Sie Firebase App Check für jeden Dienst, der ihn unterstützt.

Konfigurieren Sie Ihre Cloud Functions, um für normalen Traffic zu skalieren

Cloud Functions wird automatisch skaliert, um den Anforderungen Ihrer App gerecht zu werden. Im Falle eines Angriffs kann dies jedoch zu einer hohen Rechnung führen. Um dies zu verhindern, können Sie die Anzahl der gleichzeitigen Instanzen einer Funktion basierend auf dem normalen Traffic für Ihre App begrenzen.

Benachrichtigungen einrichten, um informiert zu werden, wenn die Limits fast erreicht sind

Wenn Ihr Dienst Anfragespitzen aufweist, werden häufig Kontingente aktiviert und der Traffic zu Ihrer Anwendung automatisch gedrosselt.

  • Behalten Sie das Dashboard _Nutzung und Abrechnung_ im Blick.

  • Richten Sie Budgetbenachrichtigungen für Ihr Projekt ein, um benachrichtigt zu werden, wenn die Ressourcennutzung die Erwartungen übersteigt.

  • Wenn Sie Firebase AI Logic, Firebase App Hosting, Cloud Functions for Firebase und Firebase Extensions verwenden, legen Sie Ausgabenobergrenzen fest, um den entsprechenden Dienst zu pausieren, wenn das für diesen Dienst festgelegte Budget erreicht wird.

Selbst verursachte DoS-Angriffe verhindern: Funktionen lokal mit den Emulatoren testen

Bei der Entwicklung Cloud Functions kann es leicht passieren, dass Sie versehentlich einen DoS-Angriff auf sich selbst ausführen, z. B. durch das Erstellen einer Endlosschleife für Trigger-Schreibvorgänge. Sie können verhindern, dass diese Fehler Live-Dienste beeinträchtigen, indem Sie die Entwicklung mit dem Firebase Local Emulator Suite durchführen.

Wenn Sie versehentlich einen DoS-Angriff auf sich selbst ausführen, heben Sie die Bereitstellung Ihrer Funktion auf, indem Sie sie löschen aus index.js und dann ausführen firebase deploy --only functions.

Wenn die Reaktionsfähigkeit in Echtzeit weniger wichtig ist, Funktionen defensiv strukturieren

Wenn Sie das Ergebnis einer Funktion nicht in Echtzeit präsentieren müssen, können Sie missbräuchlichen Traffic vermeiden, indem Sie die Ergebnisse in Batches verarbeiten: Veröffentlichen Sie Ergebnisse in einem Pub/Sub Thema und verarbeiten Sie die Ergebnisse in regelmäßigen Abständen mit einer geplanten Funktion.

API-Schlüssel

API-Schlüssel für Firebase-Dienste sind nicht geheim

API-Schlüssel für Firebase-Dienste identifizieren nur Ihr Firebase-Projekt und Ihre App für diese Dienste. Die Autorisierung erfolgt über Google Cloud IAM-Berechtigungen, Firebase Security Rules und Firebase App Check.

Alle von Firebase bereitgestellten API-Schlüssel sind automatisch auf Firebase-bezogene APIs beschränkt. Wenn die Einrichtung Ihrer App den Richtlinien auf dieser Seite entspricht, müssen auf Firebase-Dienste beschränkte API-Schlüssel nicht als Geheimnisse behandelt werden und können sicher in Ihren Code- oder Konfigurationsdateien enthalten sein.

API-Schlüsseleinschränkungen einrichten

Wenn Sie API-Schlüssel für andere Google-Dienste verwenden, müssen Sie API-Schlüsseleinschränkungen anwenden, um Ihre API-Schlüssel auf Ihre App-Clients und die von Ihnen verwendeten APIs zu beschränken.

Verwenden Sie Ihre von Firebase bereitgestellten API-Schlüssel nur für Firebase-bezogene APIs. Wenn Ihre App andere APIs verwendet (z. B. die Places API für Maps oder die Gemini Developer API), verwenden Sie einen separaten API-Schlüssel und beschränken Sie ihn auf die entsprechende API.

FCM Serverschlüssel geheim halten

Im Gegensatz zu API-Schlüsseln für Firebase-Dienste sind FCM Serverschlüssel (die von der Legacy FCM HTTP API) vertraulich und müssen geheim gehalten werden.

Audit-Logging für Cloud Messaging aktivieren

Sie sollten das Cloud-Audit Logging für Cloud Messaging aktivieren, so dass Sie administrative Aktivitäten und Zugriffsereignisse in Ihren FCM Ressourcen aufzeichnen können.

Dienstkontoschlüssel geheim halten

Im Gegensatz zu API-Schlüsseln für Firebase-Dienste sind private Schlüssel von Dienstkonten (die vom Firebase Admin SDK) vertraulich und müssen geheim gehalten werden.

Firebase Security Rules

Regeln im Produktions- oder Sperrmodus initialisieren

Wenn Sie Cloud Firestore, Realtime Database und Cloud Storage einrichten, initialisieren Sie Ihre Firebase Security Rules so, dass der Zugriff standardmäßig verweigert wird. Fügen Sie dann Regeln hinzu, die Zugriff auf bestimmte Ressourcen gewähren, während Sie Ihre App entwickeln.

Verwenden Sie eine der Standardeinstellungen für neue Instanzen von Cloud Firestore (Produktions modus) und Realtime Database (Sperrmodus). Beginnen Sie für Cloud Storage mit einer Konfiguration für Sicherheits regeln wie der folgenden:

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

Sicherheitsregeln sind ein Schema. Fügen Sie Regeln hinzu, wenn Sie Dokumente hinzufügen

Schreiben Sie Sicherheitsregeln nicht erst nach der Entwicklung Ihrer App als eine Art Aufgabe vor der Veröffentlichung. Schreiben Sie stattdessen Sicherheitsregeln, während Sie Ihre App entwickeln, und behandeln Sie sie wie ein Datenbankschema: Wenn Sie einen neuen Dokumenttyp oder eine neue Pfadstruktur verwenden müssen, schreiben Sie zuerst die entsprechende Sicherheitsregel.

Unit-Test-Sicherheitsregeln mit der Local Emulator Suite; zu CI hinzufügen

Damit Ihre Sicherheitsregeln mit der Entwicklung Ihrer App Schritt halten, testen Sie Ihre Regeln mit der Firebase Local Emulator Suite und fügen Sie diese Tests Ihrer CI-Pipeline hinzu. Weitere Informationen finden Sie in diesen Leitfäden für Cloud Firestore und Realtime Database.

Authentifizierung

Benutzerdefinierte Authentifizierung: JWTs aus einer vertrauenswürdigen (serverseitigen) Umgebung erstellen

Wenn Sie bereits ein sicheres Anmeldesystem haben, entweder ein benutzerdefiniertes System oder einen Drittanbieterdienst, können Sie Ihr vorhandenes System verwenden, um sich bei Firebase-Diensten zu authentifizieren. Erstellen Sie benutzerdefinierte JWTs in einer vertrauenswürdigen Umgebung und übergeben Sie die Tokens dann an Ihren Client, der das Token zur Authentifizierung verwendet (iOS+, Android, Web, Unity, C++).

Ein Beispiel für die Verwendung der benutzerdefinierten Authentifizierung mit einem Drittanbieter finden Sie unter dem Blogpost Authenticate with Firebase using Okta.

Verwaltete Authentifizierung: OAuth 2.0-Anbieter sind am sichersten

Wenn Sie die verwalteten Authentifizierungsfunktionen von Firebase verwenden, sind die Optionen für OAuth 2.0-/OpenID Connect-Anbieter (Google, Facebook usw.) am sichersten. Sie sollten nach Möglichkeit einen oder mehrere dieser Anbieter unterstützen (je nach Nutzerbasis).

E‑Mail-/Passwort-Authentifizierung: Strenges Kontingent für den Anmelde-Endpunkt festlegen, um Brute-Force-Angriffe zu verhindern

Wenn Sie den verwalteten E‑Mail-/Passwort-Authentifizierungsdienst von Firebase verwenden, sollten Sie das Standardkontingent der identitytoolkit.googleapis.com-Endpunkte erhöhen, um Brute-Force-Angriffe zu verhindern. Sie können dies auf der Seite in der Google Cloud Konsole tun.

E‑Mail-/Passwort-Authentifizierung: Schutz vor E‑Mail-Aufzählung aktivieren

Wenn Sie den verwalteten E‑Mail-/Passwort-Authentifizierungsdienst von Firebase verwenden, aktivieren Sie den Schutz vor E‑Mail-Aufzählung, dadurch wird verhindert, dass böswillige Akteure die Authentifizierungs-Endpunkte Ihres Projekts missbrauchen, um Kontonamen zu erraten.

Upgrade auf Google Cloud Identity Platform für die Multi-Faktor-Authentifizierung

Für zusätzliche Sicherheit bei der Anmeldung können Sie die Unterstützung der Multi-Faktor-Authentifizierung hinzufügen indem Sie auf Google Cloud Identity Platform upgraden. Ihr vorhandener Firebase Authentication Code funktioniert auch nach dem Upgrade.

Anonyme Authentifizierung

Anonyme Authentifizierung nur für das Onboarding verwenden

Verwenden Sie die anonyme Authentifizierung nur, um den grundlegenden Status für Nutzer zu speichern, bevor sie sich anmelden. Die anonyme Authentifizierung ersetzt nicht die Nutzeranmeldung.

Nutzer auf eine andere Anmeldemethode umstellen, wenn sie ihre Daten auf anderen Geräten verwenden möchten

Daten aus der anonymen Authentifizierung bleiben nicht erhalten, wenn der Nutzer den lokalen Speicher löscht oder das Gerät wechselt. Wenn Sie Daten über App-Neustarts auf einem einzelnen Gerät hinaus beibehalten müssen, stellen Sie den Nutzer auf ein permanentes Konto um.

Sicherheitsregeln verwenden, die erfordern, dass Nutzer zu einem Anmeldeanbieter gewechselt sind oder ihre E‑Mail-Adresse bestätigt haben

Jeder kann ein anonymes Konto in Ihrem Projekt erstellen. Schützen Sie daher alle nicht öffentlichen Daten mit Sicherheitsregeln, die bestimmte Anmeldemethoden oder bestätigte E‑Mail-Adressen erfordern.

Beispiel:

allow write: if request.auth.token.firebase.sign_in_provider != "anonymous";
allow write: if request.auth.token.email_verified = true;

Cloud Functions Sicherheit

Vertrauliche Informationen niemals in Umgebungsvariablen speichern

In einer selbst gehosteten Node.js-App werden häufig Umgebungsvariablen verwendet, um vertrauliche Informationen wie private Schlüssel zu speichern. Dies sollten Sie in Cloud Functions nicht tun. Da Cloud Functions Umgebungen zwischen Funktionsaufrufen wiederverwendet, sollten vertrauliche Informationen nicht in der Umgebung gespeichert werden.

  • Wenn Sie Firebase-API-Schlüssel speichern möchten (die nicht geheim sind), betten Sie sie einfach in den Code ein.

  • Wenn Sie das Firebase Admin SDK in einer Cloud Functions verwenden, müssen Sie keine Anmeldedaten für das Dienstkonto angeben, da das Admin SDK sie während der Initialisierung automatisch abrufen kann.

  • Wenn Sie Google- und Google Cloud APIs aufrufen, für die Anmeldedaten für das Dienstkonto erforderlich sind, kann die Google Auth-Bibliothek für Node.js diese Anmeldedaten aus den Standardanmeldedaten für Anwendungen, die in Cloud Functions automatisch ausgefüllt werden, abrufen.

  • Wenn Sie private Schlüssel und Anmeldedaten für Nicht-Google-Dienste für Ihre Cloud Functions verfügbar machen möchten, verwenden Sie Secret Manager.

Vertrauliche Informationen verschlüsseln

Wenn Sie nicht vermeiden können, vertrauliche Informationen an Ihre Funktionen zu übergeben, müssen Sie eine eigene benutzerdefinierte Lösung entwickeln, um die Informationen zu verschlüsseln.

Einfache Funktionen sind sicherer. Wenn Sie Komplexität benötigen, sollten Sie Cloud Run in Betracht ziehen

Versuchen Sie, Ihre Funktionen so einfach und verständlich wie möglich zu halten. Komplexität in Ihren Funktionen kann oft zu schwer zu erkennenden Fehlern oder unerwartetem Verhalten führen.

Wenn Sie komplexe Logik oder Umgebungskonfigurationen benötigen, sollten Sie Cloud Run anstelle von Cloud Functions verwenden.

Umgebungsverwaltung

Entwicklungs- und Stagingprojekte einrichten

Richten Sie separate Firebase-Projekte für Entwicklung, Staging und Produktion ein. Führen Sie den Clientcode erst dann in die Produktion ein, wenn er mit dem Stagingprojekt getestet wurde.

Zugriff des Teams auf Produktionsdaten beschränken

Wenn Sie mit einem größeren Team zusammenarbeiten, können Sie die Folgen von Fehlern und Verstößen minimieren, indem Sie den Zugriff auf Produktionsdaten mit vordefinierten IAM-Rollen oder benutzerdefinierten IAM-Rollen beschränken.

Wenn Ihr Team die Firebase Local Emulator Suite (empfohlen) für die Entwicklung verwendet, müssen Sie möglicherweise keinen umfassenderen Zugriff auf das Produktionsprojekt gewähren.

Bibliotheksverwaltung

Auf Tippfehler in Bibliotheken oder neue Verantwortliche achten

Achten Sie beim Hinzufügen von Bibliotheken zu Ihrem Projekt genau auf den Namen der Bibliothek und die Verantwortlichen. Eine Bibliothek mit einem ähnlichen Namen wie die, die Sie installieren möchten, könnte schädlichen Code enthalten.

Bibliotheken nicht aktualisieren, ohne die Änderungen zu verstehen

Sehen Sie sich die Änderungsprotokolle aller von Ihnen verwendeten Bibliotheken an, bevor Sie ein Upgrade durchführen. Prüfen Sie, ob das Upgrade einen Mehrwert bietet, und ob der Verantwortliche immer noch eine vertrauenswürdige Person ist.

Watchdog-Bibliotheken als Entwicklungs- oder Testabhängigkeiten installieren

Verwenden Sie eine Bibliothek wie Snyk, um Ihr Projekt auf unsichere Abhängigkeiten zu scannen.

Monitoring für Cloud Functions einrichten und nach Bibliotheksupdates prüfen

Wenn Sie das Cloud Functions Logger SDK verwenden, dann können Sie ungewöhnliches Verhalten beobachten und sich benachrichtigen lassen , einschließlich Verhalten, das durch Bibliotheksupdates verursacht wird.