Firebase-Sicherheitscheckliste

Folgen Sie diesen Richtlinien, um Ihre Firebase-Ressourcen und die Daten Ihrer Nutzer zu schützen. 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 Back-End-Dienste einrichten

Um missbräuchlichen Traffic wie Denial-of-Service-Angriffe (DoS) zu erkennen, 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 diese Funktion unterstützt.

Konfigurieren Sie Ihre Cloud Functions, damit sie für normalen Traffic skaliert werden

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 oft 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 informiert 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 Ausgabenlimits 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 sich auf Live-Dienste auswirken, indem Sie die Entwicklung mit der 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 die Verwendung mit Firebase-bezogenen 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, stellen Sie sicher, dass 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.

Dienstkontoschlüssel geheim halten

Im Gegensatz zu API-Schlüsseln für Firebase-Dienste sind private Dienstkontoschlüssel (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 Sicherheits regelkonfiguration 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 dem Start. 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.

Sicherheitsregeln mit der Local Emulator Suite testen und 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: Legen Sie ein strenges Kontingent für den Anmeldeendpunkt fest, um Brute-Force-Angriffe zu verhindern

Wenn Sie den verwalteten E-Mail-/Passwort-Authentifizierungsdienst von Firebase verwenden, erhöhen Sie das Standardkontingent der identitytoolkit.googleapis.com-Endpunkte, 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, wodurch verhindert wird, 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 ein Upgrade auf Google Cloud Identity Platform durchführen. Ihr vorhandener Firebase Authentication Code funktioniert auch nach dem Upgrade.

Anonyme Authentifizierung

Anonyme Authentifizierung nur für das Warm-Onboarding verwenden

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

Nutzer zu einer anderen Anmeldemethode wechseln, 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, wechseln Sie den Nutzer zu einem dauerhaften Konto.

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. Verwenden Sie diese Methode nicht in Cloud Functions. Da Cloud Functions Umgebungen zwischen Funktionsaufrufen wiederverwendet, sollten vertrauliche Informationen nicht in der Umgebung gespeichert werden.

  • Um Firebase-API-Schlüssel zu speichern (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 Dienstkontoanmeldedaten angeben, da das Admin SDK sie während der Initialisierung automatisch abrufen kann.

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

  • Verwenden Sie Secret Manager, um private Schlüssel und Anmeldedaten für Nicht-Google-Dienste für Ihre Cloud Functions verfügbar zu machen.

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 findenden 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 zusammen, wenn er im 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 Sicherheitsverletzungen 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 Bibliotheksnamen 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. Achten Sie darauf, dass das Upgrade einen Mehrwert bietet, und prüfen Sie, 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 darüber benachrichtigen lassen, einschließlich Verhalten, das durch Bibliotheksupdates verursacht wird.