Firebase-Sicherheitscheckliste

Befolgen Sie diese Richtlinien, um Ihre Firebase-Ressourcen und die Daten Ihrer Nutzer zu schützen. Nicht jedes Element wird unbedingt auf Ihre Anforderungen zutreffen, aber denken Sie daran, wenn Sie Ihre App entwickeln.

Vermeiden Sie missbräuchlichen Verkehr

Überwachung und Benachrichtigungen für Back-End-Dienste einrichten

Zum Nachweis von missbräuchlichen Verkehr, wie Denial-of-Service - Angriffe (DoS), richten Sie die Überwachung und Alarmierung für Cloud - Firestor , Echtzeit - Datenbank , Cloud Storage und Hosting

Wenn Sie einen Angriff auf Ihrer Anwendung vermuten, zu erreichen , um Unterstützung aus so schnell wie möglich , um sie wissen zu lassen , was geschieht.

App-Check aktivieren

Um sicherzustellen , nur Ihre Anwendungen Back - End - Dienste zugreifen können, aktivieren App prüfen für jeden Dienst, der sie unterstützt.

Konfigurieren Sie Ihre Cloud Functions-Funktionen so, dass sie für normalen Traffic skaliert werden

Cloud Functions skaliert automatisch, um die Anforderungen Ihrer App zu erfüllen, aber im Falle eines Angriffs kann dies eine hohe Rechnung bedeuten. Um dies zu verhindern, können Sie die Anzahl der gleichzeitigen Instanzen beschränken , basierend auf dem normalen Verkehr für Ihre Anwendung einer Funktion.

Benachrichtigung einrichten, um benachrichtigt zu werden, wenn die Grenzen fast erreicht sind

Wenn Ihr Dienst Anforderungsspitzen aufweist, treten häufig Kontingente in Kraft und drosseln automatisch den Datenverkehr zu Ihrer Anwendung. Stellen Sie sicher , überwachen Nutzung und Abrechnung Armaturenbrett , aber Sie können auch Budget - Benachrichtigungen einrichten auf Ihrem Projekt informiert werden , wenn die Ressourcennutzung wird die Erwartungen.

Selbst-DOSes verhindern: Funktionen lokal mit den Emulatoren testen

Es kann leicht passieren, dass Sie bei der Entwicklung von Cloud Functions versehentlich selbst DOS ausführen: beispielsweise durch Erstellen einer unendlichen Trigger-Write-Schleife. Sie können diese Fehler von beeinflussen Live - Dienste verhindern , indem Sie Ihre Entwicklung mit dem zu tun Firebase Emulator Suite .

(Und wenn Sie das tun accidently DOS selbst, undeploy Ihre Funktion , indem sie es aus dem Entfernen index.js dann läuft firebase deploy --only functions .)

Wo Echtzeit-Reaktionsfähigkeit weniger wichtig ist, funktioniert die Struktur defensiv

Wenn Sie nicht brauchen das Ergebnis einer Funktion in Echtzeit zu präsentieren, können Sie vor missbräuchlichen Verkehr verringern , indem die Verarbeitung der Ergebnisse in den Reihen: veröffentlichen Ergebnisse zu einem Pub / Sub - Thema, und die Ergebnisse in regelmäßigen Abständen mit einem Prozess geplant Funktion .

API-Schlüssel verstehen

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

Firebase Anwendungen API - Schlüssel nur der App Firebase Projekt Firebase Dienstleistungen zu identifizieren, und nicht , um den Zugriff auf die Datenbank oder Cloud Storage Daten, die erfolgt über Firebase Sicherheitsregeln . Aus diesem Grund müssen Sie API-Schlüssel für Firebase-Dienste nicht als Geheimnisse behandeln und können sie sicher in Clientcode einbetten. Erfahren Sie mehr über API - Schlüssel für Firebase .

API-Schlüsselbereich einrichten

Als zusätzliche Abschreckung gegen einen Angreifer versuchen , Ihren API - Schlüssel zu fälschen Anfragen zu verwenden, können Sie API - Schlüssel erstellen scoped zu Ihren App Kunden .

Halten Sie die FCM-Serverschlüssel geheim

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

Dienstkontoschlüssel geheim halten

Auch im Gegensatz zu API - Schlüssel für Firebase Dienste, Dienstkonto private Schlüssel (verwendet von der Admin SDK ) sind empfindlich und müssen geheim gehalten werden.

Sicherheitsregeln

Regeln im Produktions- oder gesperrten Modus initialisieren

Wenn Sie Cloud Firestore, Realtime Database und Cloud Storage einrichten, initialisieren Sie Ihre Sicherheitsregeln, um standardmäßig jeden Zugriff zu verweigern, und fügen Sie Regeln hinzu, die den Zugriff auf bestimmte Ressourcen gewähren, während Sie Ihre App entwickeln.

Dies ist eine der Standardeinstellungen für neue Instanzen von Cloud Firestore (Produktionsmodus) und Realtime Database (gesperrter Modus). Wählen Sie diese Option, wenn Sie eine neue Datenbankinstanz einrichten.

Beginnen Sie für Cloud Storage mit einer Sicherheitsregelkonfiguration wie der folgenden:

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

Sicherheitsregeln sind ein Schema; Regeln hinzufügen, wenn Sie Dokumente hinzufügen

Schreiben Sie keine Sicherheitsregeln, nachdem Sie Ihre App geschrieben haben, als eine Art Pre-Launch-Aufgabe. Schreiben Sie stattdessen Sicherheitsregeln, während Sie Ihre App schreiben, und behandeln Sie sie wie ein Datenbankschema: Wenn Sie einen neuen Dokumenttyp oder eine neue Pfadstruktur verwenden müssen, schreiben Sie zuerst die Sicherheitsregel.

Unit-Test-Sicherheitsregeln mit der Emulator Suite; füge es zu CI hinzu

Um sicherzustellen , dass Ihre Sicherheitsregeln halten mit Ihrem App - Entwicklung, Unit - Test Ihre Regeln mit der Emulator Suite Firebase und fügen Sie diese Tests auf Ihre CI - Pipeline. Sehen Sie diese Führungen für Cloud - Firestor und Realtime - Datenbank .

Authentifizierung

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

Wenn Sie bereits über ein sicheres Anmeldesystem verfügen, sei es ein benutzerdefiniertes System oder ein Drittanbieterdienst, können Sie Ihr vorhandenes System verwenden, um sich bei Firebase-Diensten zu authentifizieren. Erstellen von benutzerdefinierten JWTs aus einer Umgebung vertraut, dann passieren die Token an Ihren Kunden, die das Token anmeldet ( iOS , Android , Web , Unity , C ++ ).

Ein Beispiel für die individuelle Authentifizierung mit einem Drittanbieter verwenden, finden Sie in die Blog - Post, Authentifizieren mit Firebase Okta mit .

Verwaltete Authentifizierung: OAuth 2.0-Anbieter sind die sichersten

Wenn Sie die verwalteten Authentifizierungsfunktionen von Firebase verwenden, sind die OAuth 2.0 / OpenID Connect-Anbieteroptionen (Google, Facebook usw.) die sichersten. Sie sollten einen oder mehrere dieser Anbieter unterstützen, wenn Sie können (abhängig von Ihrer Benutzerbasis).

E-Mail-Passwort-Authentifizierung: Legen Sie ein enges Kontingent für den Anmeldeendpunkt fest, um Brute-Force-Angriffe zu verhindern

Wenn Sie Firebase der verwalteten E - Mail-Passwort - Authentifizierungsdienst verwenden, ziehen Sie das Standardkontingent der identitytoolkit.googleapis.com Endpunkte Brute - Force - Angriffe zu verhindern. Sie können dies tun , um die Seite der API in der Google Cloud Console .

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

Für zusätzliche Sicherheit auf Sign-in, können Sie Multi-Faktor - Authentifizierung Unterstützung durch ein Upgrade auf hinzufügen Cloud - Identity - Plattform . Ihr vorhandener Firebase-Authentifizierungscode funktioniert auch nach dem Upgrade.

Anonyme Authentifizierung

Verwenden Sie nur die anonyme Authentifizierung für das Warm-Onboarding

Verwenden Sie die anonyme Authentifizierung nur, um den Basisstatus für Benutzer zu speichern, bevor sie sich tatsächlich anmelden. Die anonyme Authentifizierung ist kein Ersatz für die Benutzeranmeldung.

Konvertieren Sie Benutzer zu einer anderen Anmeldemethode, wenn sie die Daten benötigen, wenn sie ihr Telefon verlieren

Anonyme Authentifizierungsdaten bleiben nicht erhalten, wenn der Benutzer den lokalen Speicher löscht oder das Gerät wechselt. Wenn Sie Daten über App Neustarts auf einem einzelnen Gerät bestehen bleiben müssen, wandeln den Benutzer zu einem dauerhaften Konto .

Verwenden Sie Sicherheitsregeln, die erfordern, dass Benutzer zu einem Anmeldeanbieter konvertiert oder ihre E-Mail-Adresse bestätigt haben

Jeder kann in Ihrem Projekt ein anonymes Konto erstellen. Mit dem im Verstand, schützen alle nicht-öffentliche Daten mit Sicherheitsregeln , die bestimmen eine Anmeldung erforderlich Methoden oder überprüften E - Mail - Adressen .

Beispielsweise:

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

Umweltmanagement

Aufbau von Entwicklungs- und Staging-Projekten

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

Beschränken Sie den Teamzugriff auf Produktionsdaten

Wenn Sie mit einem größeren Team arbeiten, können Sie die Folgen von Fehlern und Verletzungen mindern , indem sie den Zugriff auf Produktionsdaten Begrenzung entweder vordefinierte Rollen oder benutzerdefinierte IAM Rollen.

Wenn Ihr Team die Emulator-Suite für die Entwicklung verwendet, müssen Sie möglicherweise keinen breiteren Zugriff auf das Produktionsprojekt gewähren.

Bibliotheksverwaltung

Achten Sie auf Rechtschreibfehler in der Bibliothek oder neue Betreuer

Achten Sie beim Hinzufügen von Bibliotheken zu Ihrem Projekt genau auf den Namen der Bibliothek und ihrer Betreuer. Eine Bibliothek mit ähnlichem Namen wie die, die Sie installieren möchten, könnte bösartigen Code enthalten.

Aktualisieren Sie keine Bibliotheken, ohne die Änderungen zu verstehen

Sehen Sie sich die Änderungsprotokolle aller Bibliotheken an, die Sie verwenden, bevor Sie ein Upgrade durchführen. Stellen Sie sicher, dass das Upgrade einen Mehrwert bietet, und überprüfen Sie, ob der Betreuer weiterhin eine vertrauenswürdige Partei ist.

Watchdog-Bibliotheken als Entwicklungs- oder Testabhängigkeiten installieren

Verwenden Sie eine Bibliothek wie Snyk Ihr Projekt für unsichere Abhängigkeiten zu scannen.

Überwachung für Funktionen einrichten; Überprüfen Sie es nach Bibliotheksaktualisierungen

Wenn Sie die Verwendung Cloud - Funktionen Logger SDK können Sie überwachen und alarmiert werden von ungewöhnlichem Verhalten, einschließlich des Verhaltens von Library - Updates verursacht.

Sicherheit der Cloud-Funktion

Geben Sie niemals vertrauliche Informationen in die Umgebungsvariablen einer Cloud Functions-Funktion ein

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

  • Zum Speichern von Firebase API - Schlüssel, die sind nicht geheim , nur betten sie in Code.
  • Wenn Sie das Firebase Admin SDK in einer Cloud Functions-Funktion verwenden, müssen Sie die Anmeldedaten für das Dienstkonto nicht explizit angeben, da das SDK diese während der Initialisierung automatisch abrufen kann.
  • Wenn Sie anrufen APIs Google und Google Cloud , das Dienstkonto Anmeldeinformationen erforderlich sind , kann die Google Auth - Bibliothek für Node.js diese Anmeldeinformationen von den bekommen Anwendung Standardanmeldeinformationen , die in Cloud - Funktionen automatisch ausgefüllt werden.
  • Um private Schlüssel und Berechtigungsnachweise für Nicht-Google - Dienste zur Verfügung zu Ihrer Cloud - Funktionen zu machen, verwenden Sie Cloud - Geheim - Manager .

Verschlüsseln Sie sensible Informationen

Wenn Sie die Weitergabe vertraulicher Informationen an Ihre Cloud Functions-Funktion nicht vermeiden können, müssen Sie Ihre eigene benutzerdefinierte Lösung entwickeln, um die Informationen zu verschlüsseln.

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

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

Wenn Sie komplexe Logik oder Umgebung Konfigurationen brauchen, sollten Sie mit Cloud - Run statt Cloud - Funktionen.