Wenn Sie Ihre Firebase-Ressourcen und die Daten Ihrer Nutzer schützen möchten, sollten Sie diese Richtlinien beachten. Nicht alle Punkte sind unbedingt für Ihre Anforderungen relevant. Behalten Sie sie aber bei der Entwicklung Ihrer App im Hinterkopf.
Missbräuchliche Zugriffe vermeiden
Monitoring und Benachrichtigungen für Backend-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 den Verdacht haben, dass Ihre Anwendung angegriffen wird, wenden Sie sich so schnell wie möglich an den Support, um ihn über die Situation zu informieren.
App Check aktivieren
Damit nur Ihre Apps auf Ihre Backend-Dienste zugreifen können, aktivieren Sie Firebase App Check für jeden Dienst, der dies unterstützt.
Cloud Functions für normales Trafficvolumen 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 wird automatisch gedrosselt. Behalten Sie das Dashboard für Nutzung und Abrechnung im Blick. Sie können aber auch Budgetbenachrichtigungen für Ihr Projekt einrichten, um benachrichtigt zu werden, wenn die Ressourcennutzung die Erwartungen übersteigt.
Selbst-DOS-Angriffe verhindern: Funktionen lokal mit den Emulatoren testen
Es kann leicht passieren, dass Sie sich beim Entwickeln von Cloud Functions versehentlich selbst DOS-Angriffen aussetzen, z. B. durch das Erstellen einer Endlosschleife für Trigger-Schreibvorgänge. Sie können verhindern, dass sich diese Fehler auf Live-Dienste auswirken, indem Sie die Entwicklung mit der Firebase Local Emulator Suite durchführen.
Wenn Sie sich versehentlich selbst DOS-Angriffen aussetzen, heben Sie die Bereitstellung Ihrer Funktion auf, indem Sie sie aus index.js löschen und dann firebase deploy --only functions
Funktionen defensiv strukturieren, wenn die Reaktionsfähigkeit in Echtzeit weniger wichtig ist
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 die 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 die IAM-Berechtigungen Google Cloud, 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 vertrauliche Informationen behandelt werden. Sie können sie also bedenkenlos in Ihren Code oder Ihre Konfigurationsdateien einfügen.
Einschränkungen für API-Schlüssel einrichten
Wenn Sie API-Schlüssel für andere Google-Dienste verwenden, sollten 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 über Firebase bereitgestellten API-Schlüssel nur für Firebase-bezogene APIs. Wenn Ihre App andere APIs verwendet, z. B. die Places API for Maps oder die Gemini Developer API, verwenden Sie einen separaten API-Schlüssel und schränken Sie ihn auf die entsprechende API ein.
FCM-Serverschlüssel geheim halten
Im Gegensatz zu API-Schlüsseln für Firebase-Dienste sind FCM-Serverschlüssel (die von der alten FCM HTTP API verwendet werden) 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 von Firebase Admin SDK verwendet werden) 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 Firebase Security Rules so, dass der Zugriff standardmäßig verweigert wird. Fügen Sie dann Regeln hinzu, die den Zugriff auf bestimmte Ressourcen gewähren, während Sie Ihre App entwickeln.
Verwenden Sie eine der Standardeinstellungen für neue Instanzen von Cloud Firestore (Produktionsmodus) und Realtime Database (gesperrter Modus). Beginnen Sie für Cloud Storage mit einer Konfiguration von Sicherheitsregeln 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 Local Emulator Suite testen und zu CI hinzufügen
Damit Ihre Sicherheitsregeln mit der Entwicklung Ihrer App Schritt halten, sollten Sie sie mit dem Firebase Local Emulator Suite testen und diese Tests in Ihre CI-Pipeline einfügen. Weitere Informationen finden Sie in den Anleitungen für Cloud Firestore und Realtime Database.
Authentifizierung
Benutzerdefinierte Authentifizierung: JWTs in einer vertrauenswürdigen (serverseitigen) Umgebung erstellen
Wenn Sie bereits ein sicheres Anmeldesystem haben, sei es ein benutzerdefiniertes System oder ein Drittanbieterdienst, können Sie Ihr vorhandenes System verwenden, um sich bei Firebase-Diensten zu authentifizieren. Benutzerdefinierte JWTs in einer vertrauenswürdigen Umgebung erstellen und die Tokens dann an Ihren Client übergeben, 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 im 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 OAuth 2.0-/OpenID Connect-Anbieteroptionen (Google, Facebook usw.) am sichersten. Sie sollten einen oder mehrere dieser Anbieter unterstützen, wenn möglich (abhängig von Ihrer Nutzerbasis).
Authentifizierung mit E-Mail-Adresse und Passwort: Legen Sie ein strenges Kontingent für den Anmeldeendpunkt fest, um Brute-Force-Angriffe zu verhindern.
Wenn Sie den verwalteten Dienst für die E-Mail-Passwort-Authentifizierung von Firebase verwenden, sollten Sie das Standardkontingent der identitytoolkit.googleapis.com-Endpunkte einschränken, um Brute-Force-Angriffe zu verhindern. Dies können Sie in der Google Cloud Console auf der Seite Identity Toolkit API tun.
E-Mail-/Passwort-Authentifizierung: Schutz vor E-Mail-Enumeration aktivieren
Wenn Sie den verwalteten Dienst für die E-Mail-Passwort-Authentifizierung von Firebase verwenden, aktivieren Sie den Schutz vor E-Mail-Aufzählung. Dadurch wird verhindert, dass böswillige Akteure die Authentifizierungsendpunkte Ihres Projekts missbrauchen, um Kontonamen zu erraten.
Für die Multi-Faktor-Authentifizierung auf Google Cloud Identity Platform upgraden
Wenn Sie die Sicherheit bei der Anmeldung erhöhen möchten, 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 weiterhin.
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 ist kein Ersatz für die Nutzeranmeldung.
Nutzer auf eine andere Anmeldemethode umstellen, wenn sie ihre Daten auf anderen Geräten verwenden möchten
Anonyme Authentifizierungsdaten 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, wandeln Sie das Konto des Nutzers in ein permanentes Konto um.
Sicherheitsregeln verwenden, die erfordern, dass Nutzer zu einem Anmeldeanbieter migriert sind oder ihre E-Mail-Adresse bestätigt haben
Jeder konnte 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;
Safety von Cloud Functions
Geben Sie niemals vertrauliche Informationen in Umgebungsvariablen ein.
In einer selbst gehosteten Node.js-App werden häufig Umgebungsvariablen verwendet, um vertrauliche Informationen wie private Schlüssel zu speichern. Das ist in Cloud Functions nicht möglich. Da Cloud Functions Umgebungen zwischen Funktionsaufrufen wiederverwendet, sollten vertrauliche Informationen nicht in der Umgebung gespeichert werden.
Firebase-API-Schlüssel (die nicht geheim sind) können Sie einfach in den Code einbetten.
Wenn Sie die Firebase Admin SDK in einer Cloud Functions verwenden, müssen Sie die Anmeldedaten des Dienstkontos nicht explizit angeben, da die 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 automatisch in Cloud Functions eingefügt werden.
Wenn Sie private Schlüssel und Anmeldedaten für Nicht-Google-Dienste für Ihr 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 zum Verschlüsseln der Informationen entwickeln.
Einfache Funktionen sind sicherer. Wenn Sie Komplexität benötigen, sollten Sie Cloud Run in Betracht ziehen.
Halten Sie Ihre Funktionen so einfach und verständlich wie möglich. 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 stattdessen Cloud Run anstelle von Cloud Functions verwenden.
Umgebungsverwaltung
Entwicklungs- und Staging-Projekte einrichten
Richten Sie separate Firebase-Projekte für Entwicklung, Staging und Produktion ein. Führen Sie Clientcode erst dann in die Produktionsumgebung ein, wenn er mit dem Staging-Projekt getestet wurde.
Teamzugriff auf Produktionsdaten einschrä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 entweder mit vordefinierten IAM-Rollen oder benutzerdefinierten IAM-Rollen einschränken.
Wenn Ihr Team Firebase Local Emulator Suite (empfohlen) für die Entwicklung verwendet, müssen Sie möglicherweise keinen umfassenderen Zugriff auf das Produktionsprojekt gewähren.
Mediathek verwalten
Auf Rechtschreibfehler in der Bibliothek oder neue Maintainer achten
Achten Sie beim Hinzufügen von Bibliotheken zu Ihrem Projekt genau auf den Namen der Bibliothek und die Namen der 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 kennen
Sehen Sie sich vor dem Upgrade die Änderungsprotokolle aller verwendeten Bibliotheken an. Achten Sie darauf, dass das Upgrade einen Mehrwert bietet, und prüfen Sie, ob der Maintainer immer noch eine Person ist, der Sie vertrauen.
Watchdog-Bibliotheken als Entwicklungs- oder Testabhängigkeiten installieren
Verwenden Sie eine Bibliothek wie Snyk, um Ihr Projekt nach unsicheren Abhängigkeiten zu scannen.
Monitoring für Cloud Functions einrichten und nach Bibliotheksupdates prüfen
Wenn Sie das Cloud Functions-Logger-SDK verwenden, können Sie ungewöhnliches Verhalten beobachten und sich benachrichtigen lassen, einschließlich Verhalten, das durch Bibliotheksupdates verursacht wird.