Um Ihre Firebase-Ressourcen und die sicher sein können, folgen Sie diesen Richtlinien einhalten. Nicht jeder Punkt trifft auf Ihre Anforderungen zu, aber sollten Sie bei der Entwicklung Ihrer App im Hinterkopf behalten.
Missbrauch von Zugriffen vermeiden
Monitoring und Benachrichtigungen für Back-End-Dienste einrichten
Um missbräuchlichen Traffic wie DoS-Angriffe (Denial of Service) zu erkennen, richten Sie Monitoring und Benachrichtigungen für Cloud Firestore, Realtime Database, Cloud Storage und Hosting
Wenn Sie einen Angriff auf Ihre Anwendung vermuten, wenden Sie sich so bald wie möglich an den Support, und sie darüber informieren.
App Check aktivieren
Um sicherzustellen, dass nur Ihre Anwendungen auf Ihre Backend-Dienste zugreifen können, aktivieren Sie Firebase App Check für jeden unterstützten Dienst.
Cloud Functions für die Skalierung für normalen Traffic konfigurieren
Cloud Functions wird automatisch skaliert, um die Anforderungen Ihrer App zu erfüllen, aber in der eines Angriffs, kann dies eine hohe Rechnung bedeuten. Um dies zu verhindern, Anzahl der gleichzeitigen Instanzen begrenzen basierend auf dem normalen Traffic für Ihre App.
Richten Sie Benachrichtigungen ein, damit Sie informiert werden, wenn die Limits fast erreicht sind.
Wenn Ihr Dienst Anfragespitzen aufweist, gelten Kontingente häufig und automatisch den Traffic zu Ihrer Anwendung zu drosseln. Achten Sie darauf, Dashboard Nutzung und Abrechnung, Sie können aber auch Budgetbenachrichtigungen festlegen in Ihrem Projekt, um benachrichtigt zu werden, wenn die Ressourcennutzung die Erwartungen überschreitet.
Selbstdosen vermeiden: Funktionen lokal mit den Emulatoren testen
Es kann leicht passieren, dass Sie bei der Entwicklung versehentlich Cloud Functions: beispielsweise durch Erstellen einer unendlichen Trigger-Schreib-Schleife. Sie können verhindern, dass diese Fehler sich auf Live-Services auswirken, indem Sie mit der Firebase Local Emulator Suite entwickeln.
Und wenn Sie versehentlich DoS selbst ausführen, heben Sie die Bereitstellung der Funktion auf, indem Sie sie löschen.
ab index.js
mit anschließender Ausführung
firebase deploy --only functions
Wenn die Echtzeitreaktion weniger wichtig ist, sollten Sie Funktionen defensiv strukturieren.
Wenn Sie das Ergebnis einer Funktion nicht in Echtzeit präsentieren müssen, können Sie Mindern Sie missbräuchlichen Traffic, indem Sie die Ergebnisse in Batches verarbeiten: Veröffentlichen Ergebnisse in ein Pub/Sub und verarbeiten die Ergebnisse in regelmäßigen Abständen geplante Funktion.
API-Schlüssel verstehen
API-Schlüssel für Firebase-Dienste sind nicht geheim
Firebase verwendet API-Schlüssel nur, um das Firebase-Projekt Ihrer App für Firebase-Dienste zu identifizieren. Der Zugriff auf Datenbank- oder Cloud Storage-Daten wird nicht über API-Schlüssel, sondern über Firebase Security Rules gesteuert. Aus diesem Grund müssen Sie API-Schlüssel für Firebase-Dienste nicht als Secrets behandeln und können sie sicher in Clientcode einbetten. Weitere Informationen zu API-Schlüsseln für Firebase
Einschränkungen für API-Schlüssel einrichten
Als zusätzliche Abschreckung für Angreifer, die versuchen, Ihren API-Schlüssel zu verwenden, um Anfragen zu fälschen, können Sie API-Schlüsseleinschränkungen hinzufügen, um Ihre API-Schlüssel auf Ihre App-Clients und die von Ihnen verwendeten APIs zu beschränken.
FCM Serverschlüssel geheim halten
Im Gegensatz zu API-Schlüsseln für Firebase-Dienste werden FCM-Serverschlüssel (werden vom Legacy FCM HTTP API) sind vertraulich und müssen geheim gehalten werden.
Dienstkontoschlüssel geheim halten
Im Gegensatz zu API-Schlüsseln für Firebase-Dienste werden private Dienstkontoschlüssel (verwendet vom Firebase Admin SDK) sind 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 Sicherheitsregeln so, dass standardmäßig der gesamte Zugriff abgelehnt wird. Fügen Sie dann bei der Entwicklung Ihrer App Regeln hinzu, die den Zugriff auf bestimmte Ressourcen gewähren.
Verwenden Sie für neue Instanzen von Cloud Firestore (Produktion) eine der Standardeinstellungen und Realtime Database (Sperrmodus). Für Cloud Storage mit einem Wertpapier beginnen wie folgt konfiguriert:
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if false;
}
}
}
Sicherheitsregeln sind ein Schema; Regeln werden hinzugefügt, wenn Sie Dokumente hinzufügen
Schreiben Sie keine Sicherheitsregeln, nachdem Sie Ihre App geschrieben haben, da es sich um eine Art Pre-Launch-Vorgang handelt. für die Aufgabe. Schreiben Sie stattdessen Sicherheitsregeln, wenn Sie Ihre Anwendung schreiben, und behandeln Sie sie wie eine Datenbankschema: Wenn Sie einen neuen Dokumenttyp oder eine neue Pfadstruktur verwenden müssen, sollten Sie zuerst seine Sicherheitsregel schreiben.
Sicherheitsregeln mit der Local Emulator Suite in einem Unit-Test testen und dem CI hinzufügen
Damit Ihre Sicherheitsregeln mit der Entwicklung Ihrer App Schritt halten, sollten Sie sie mit Firebase Local Emulator Suite als Unit-Tests testen und diese Tests Ihrer CI-Pipeline hinzufügen. In diesen Leitfäden finden Sie Cloud Firestore und Realtime Database.
Authentifizierung
Benutzerdefinierte Authentifizierung: JWTs aus einer vertrauenswürdigen (serverseitigen) Umgebung erstellen
Wenn Sie bereits über ein sicheres Anmeldesystem verfügen, egal ob ein benutzerdefiniertes System oder ein können Sie Ihr vorhandenes System für die Authentifizierung Firebase-Dienste. Benutzerdefinierte JWTs erstellen aus einer vertrauenswürdigen Umgebung aus und übergeben Sie die Tokens an Ihren Client, der die für die Authentifizierung (iOS+, Android, Web Unity, C++).
Ein Beispiel für die Verwendung der benutzerdefinierten Authentifizierung mit einem Drittanbieter finden Sie unter der Blogpost, Mit Okta bei Firebase authentifizieren
Verwaltete Authentifizierung: OAuth 2.0-Anbieter sind am sichersten
Wenn Sie die verwalteten Authentifizierungsfunktionen von Firebase verwenden, wird OAuth 2.0 / OpenID Optionen für Verbindungsanbieter (Google, Facebook usw.) sind am sichersten. Ich sollten Sie nach Möglichkeit einen oder mehrere dieser Anbieter unterstützen. Basis).
Authentifizierung mit E-Mail-Passwort: Legen Sie ein enges Kontingent für den Anmeldeendpunkt fest, um Brute-Force-Angriffe zu verhindern.
Wenn Sie den verwalteten Dienst zur Authentifizierung per E-Mail-Passwort von Firebase verwenden,
Standardkontingent der identitytoolkit.googleapis.com
Endpunkte zur Verhinderung von Brute-Angriffen
Angriffe erzwingen. Sie können dies über die
Seite zur Identity Toolkit API
in der Google Cloud-Konsole.
Authentifizierung mit E-Mail-Passwort: Schutz vor E-Mail-Enumeration aktivieren
Wenn Sie den verwalteten E-Mail-Passwort-Authentifizierungsdienst von Firebase verwenden, Schutz vor E-Mail-Enumeration aktivieren, Dadurch wird verhindert, dass böswillige Akteure die Authentifizierungsendpunkte Ihres Projekts missbrauchen, zu ermitteln.
Für Multi-Faktor-Authentifizierung auf Google Cloud Identity Platform upgraden
Für zusätzliche Sicherheit bei der Anmeldung kannst du Multi-Faktor-Authentifizierung hinzufügen durch ein Upgrade auf Google Cloud Identity Platform. Ihr vorhandener Firebase Authentication-Code funktioniert nach dem Upgrade weiterhin.
Anonyme Authentifizierung
Anonyme Authentifizierung nur für das Warm-Onboarding verwenden
Verwenden Sie nur die anonyme Authentifizierung, um den Grundzustand für Nutzer zu speichern, bevor sie tatsächlich angemeldet sind. Die anonyme Authentifizierung ist kein Ersatz für den Nutzer melden Sie sich an.
Nutzer zu einer anderen Anmeldemethode umwandeln, wenn sie ihre Daten auf anderen Geräten speichern möchten
Anonyme Authentifizierungsdaten bleiben nicht erhalten, wenn der Nutzer lokale Daten löscht. oder zu einem anderen Gerät wechseln. Wenn Sie Daten nach einem App-Neustart ein einzelnes Gerät, den Nutzer in ein dauerhaftes Konto umzuwandeln.
Verwenden Sie Sicherheitsregeln, die erfordern, dass Nutzer zu einem Anmeldeanbieter gewechselt 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 nie in Umgebungsvariablen ablegen
In einer selbst gehosteten Node.js-Anwendung verwenden Sie häufig Umgebungsvariablen, um vertrauliche Informationen wie private Schlüssel enthalten. In Cloud Functions nicht tun. Da Cloud Functions Umgebungen zwischen Funktionsaufrufen wiederverwendet, sollten vertrauliche Informationen nicht in der Umgebung gespeichert werden.
So speichern Sie Firebase API-Schlüssel, die nicht geheim sind: betten Sie sie einfach in Code ein.
Wenn Sie die Firebase Admin SDK in einer Cloud Functions verwenden, müssen Sie keine Anmeldedaten für das Dienstkonto angeben, da die Admin SDK diese während der Initialisierung automatisch abrufen kann.
Wenn Sie Google- und Google Cloud-APIs aufrufen, für die ein Dienstkonto erforderlich ist Anmeldedaten vorhanden sind, kann die Google Auth-Bibliothek für Node.js diese Anmeldedaten abrufen. aus der Standardanmeldedaten für Anwendungen, die in Cloud Functions automatisch gefüllt werden.
Wenn Sie Ihrem Konto private Schlüssel und Anmeldedaten für Dienste von Drittanbietern zur Verfügung stellen möchten, Cloud Functions, verwenden Secret Manager
Vertrauliche Daten verschlüsseln
Wenn Sie es nicht vermeiden können, vertrauliche Informationen an Ihre Funktionen weiterzugeben, müssen Sie entwickeln Sie Ihre eigene Lösung zur Verschlüsselung der Daten.
Einfache Funktionen sind sicherer Wenn es zu komplex ist, sollten Sie Cloud Run in Betracht ziehen
Versuchen Sie, die 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, verwenden Sie Cloud Run statt Cloud Functions.
Umgebungsverwaltung
Entwicklungs- und Staging-Projekte einrichten
Separate Firebase-Projekte für Entwicklung, Staging und Produktion einrichten Verschmelzen Sie den Clientcode erst mit der Produktionsumgebung, wenn er im Staging-Projekt getestet wurde.
Teamzugriff auf Produktionsdaten einschränken
Wenn Sie mit einem größeren Team zusammenarbeiten, können Sie die Folgen von Fehlern mindern. und Sicherheitsverletzungen durch Beschränkung des Zugriffs auf Produktionsdaten mithilfe vordefinierte IAM-Rollen oder benutzerdefinierte IAM-Rollen.
Wenn Ihr Team die Firebase Local Emulator Suite verwendet (empfohlen) für die Entwicklung verwenden, müssen Sie möglicherweise keinen umfassenderen Zugriff auf das Produktionsprojekts.
Bibliotheksverwaltung
Achten Sie auf Rechtschreibfehler in der Bibliothek oder neue Bearbeiter.
Achten Sie beim Hinzufügen von Bibliotheken zu Ihrem Projekt genau auf den Namen der Bibliothek und deren Betreuer. Eine Bibliothek mit einem ähnlichen Namen wie die, die Sie verwenden möchten installieren könnte bösartigen Code enthalten.
Bibliotheken nicht aktualisieren, ohne die Änderungen zu verstehen
Sehen Sie sich vor dem Upgrade die Änderungsprotokolle aller Bibliotheken an, die Sie verwenden. Achten Sie darauf, schafft das Upgrade Mehrwert und überprüft, ob der Administrator vertrauenswürdig sind.
Watchdog-Bibliotheken als Entwicklungs- oder Testabhängigkeiten installieren
Verwenden Sie eine Bibliothek wie Snyk, um Ihr Projekt zu scannen für unsichere Abhängigkeiten.
Monitoring für Cloud Functions einrichten: Nach Aktualisierungen der Mediathek ansehen
Wenn Sie das Cloud Functions-Logger-SDK verwenden, können Sie ungewöhnliches Verhalten überwachen und benachrichtigt werden, einschließlich Verhalten, das durch Bibliotheksupdates verursacht wird.