Schutz für E-Mail-Aufzählungen aktivieren oder deaktivieren

In diesem Leitfaden wird die Schutzfunktion für E-Mail-Aufzählungen erläutert und Sie erfahren, wie Sie sie aktivieren und deaktivieren. Wenn Sie Ihr Projekt am oder nach dem 15. September 2023 erstellt haben, ist der Schutz der E-Mail-Aufzählung standardmäßig aktiviert.

Überblick

Die E-Mail-Aufzählung ist eine Art von Brute-Force-Angriff, bei dem ein böswilliger Akteur versucht, Nutzer in einem System zu erraten oder zu bestätigen, indem er eine E-Mail-Adresse an die API übergibt und die Antwort prüft.

Ohne Schutz vor E-Mail-Aufzählungen gibt Identity Platform Informationen zurück, die für einen Angriff auf eine E-Mail-Aufzählung verwendet werden können:

  • Es wird versucht, sich mit einer E-Mail-Adresse anzumelden, die im System nicht vorhanden ist. Identity Platform gibt den Fehler EMAIL_NOT_FOUND zurück.

  • Es wird versucht, sich mit einer E-Mail-Adresse zu registrieren, die bereits im System vorhanden ist. Identity Platform gibt den Fehler EMAIL_EXISTS zurück.

Sie können das Schutzfeature der Identity Platform zum Schutz vor E-Mail-Aufzählungen verwenden, um Nutzerkonten in Ihrer Anwendung vor diesen Angriffen zu schützen.

Wenn der Schutz für E-Mail-Aufzählungen aktiviert ist, verhält sich Ihr Projekt folgendermaßen:

  • Die fetchSignInForEmail API schlägt fehl. Die Verknüpfung anonymer authentifizierter Nutzer mit einer E-Mail-Adresse funktioniert auch vor der SDK-Version 22.3.0 für Android, 10.18.0 für iOS und 10.6.0 für das Web nicht.

  • Eine Liste mit Anmeldemethoden für die angegebene E-Mail-Adresse wird nicht mehr zurückgegeben, wenn auf allen Plattformen die REST API createAuthUri oder die Client SDK-Methode fetchSignInMethodsForEmail aufgerufen wird.

  • Nutzer können ihre E-Mail-Adresse erst ändern, nachdem sie die neue Adresse bestätigt haben. Beispielsweise ist es nicht mehr möglich, die E-Mail-Adresse eines Nutzers mit der REST API update, der setAccountInfo REST API oder der Client SDK-Methode updateEmail auf allen Plattformen zu ändern.

    Du kannst stattdessen verifyBeforeUpdateEmail für das Web und Android oder sendEmailVerification(beforeUpdatingEmail:) für iOS verwenden.

  • Sie können die setAccountInfo REST API nicht mehr verwenden, um einen E-Mail-/Passwortanbieter mit einem vorhandenen Nutzerkonto zu verknüpfen. Sie können die Client-SDK-Methode linkWithCredential auf keiner Plattform mehr mit einem EmailAuthCredential verwenden. Verwenden Sie stattdessen die REST API signUp und übergeben Sie das ID-Token des Nutzers im Feld idToken und die zu verknüpfenden Felder email und password.

  • Fehlerantworten bei E-Mail-Bestätigungsabläufen werden entfernt, z. B. solche, die durch Aufrufen der sendOobCode REST API mit den Anfragetypen VERIFY_AND_CHANGE_EMAIL oder PASSWORD_RESET und beim Aufrufen von verifyBeforeUpdateEmail für Web und Android, sendEmailVerification(beforeUpdatingEmail:) für iOS oder sendPasswordResetEmail Client-SDK-Methoden auf allen Plattformen initiiert werden.

    Wenn Sie eine Anfrage zum Zurücksetzen des Passworts stellen, wird nur dann eine Bestätigungs-E-Mail gesendet, wenn die E-Mail-Adresse vorhanden ist. Wenn Sie eine Anfrage zur Änderung der E-Mail-Adresse stellen, wird nur dann eine Bestätigungs-E-Mail gesendet, wenn die E-Mail-Adresse noch nicht vorhanden ist. In beiden Fällen werden keine spezifischen Fehlermeldungen angezeigt, die darauf hinweisen, dass keine E-Mails gesendet werden.

    Wir empfehlen, Nutzern die Registrierung ohne E-Mail-Bestätigung nicht zu erlauben.

  • Bei ungültigen Anmeldungen wird die Fehlermeldung INVALID_LOGIN_CREDENTIALS zurückgegeben. Bei ungültigen Registrierungen werden weiterhin EMAIL_EXISTS-Fehler zurückgegeben. Die Empfehlungen finden Sie im nächsten Abschnitt.

Wenn Ihre Anwendung ein Verhalten benötigt, das vom E-Mail-Aufzählungsschutz geändert wurde, können Sie es derzeit deaktivieren. Dies wird jedoch auf lange Sicht nicht empfohlen. Weitere Informationen finden Sie im folgenden Abschnitt.

Sicherheitsempfehlungen

Eine der gängigsten Methoden für Angriffe auf Kontoübernahmen besteht darin, Credential Stuffing-Angriffe mit Anmeldedaten durchzuführen, die gehackt wurden oder leicht zu erraten sind. Die E-Mail-Aufzählung kann auch verwendet werden, um vertrauliche Informationen über Ihre Nutzer zu erhalten oder Phishing-Angriffe auf sie durchzuführen. Aus diesen Gründen empfiehlt Google, die Schutzfunktion für E-Mail-Aufzählungen zu verwenden, um Ihre Anwendungen vor solchen Angriffen zu schützen.

  • Wenn Sie Ihr Projekt am oder nach dem 15. September 2023 erstellt haben, ist der Schutz der E-Mail-Aufzählung standardmäßig aktiviert. Wir empfehlen, den Schutz für E-Mail-Aufzählungen aktiviert zu lassen und sich nicht auf die zuvor in diesem Leitfaden aufgeführten Verhaltensweisen zu verlassen.

  • Wenn Sie Ihr Projekt vor dem 15. September 2023 erstellt haben, ist der Schutz der E-Mail-Aufzählung nicht automatisch aktiviert.

    Wenn Ihre Anwendungen nicht auf die zuvor in diesem Leitfaden beschriebenen Verhaltensweisen angewiesen sind, empfehlen wir, den Schutz für die E-Mail-Aufzählung sofort zu aktivieren.

    Wenn Ihre Anwendungen auf einem der zuvor beschriebenen Verhaltensweisen basieren, empfehlen wir, so schnell wie möglich mit der Migration zu beginnen und den Schutz der E-Mail-Aufzählung zu aktivieren.

Zusätzlich zum Schutz vor E-Mail-Aufzählungen sollten Sie Maßnahmen ergreifen, um den Missbrauch der Registrierungsendpunkte Ihres Projekts zu verhindern, die weiterhin Fehler vom Typ EMAIL_EXISTS zurückgeben. Sie haben folgende Möglichkeiten:

  • Aktivieren Sie App Check.
  • Integriere reCAPTCHA in deinen Registrierungsvorgang.
  • Verhindern Sie die Anmeldung mit E-Mail-Adressen und Passwörtern oder E-Mail-Links und verwenden Sie stattdessen alternative Methoden wie Google Log-in.

Schutz für E-Mail-Aufzählungen aktivieren

So aktivieren Sie den Schutz vor E-Mail-Aufzählungen:

Firebase Console

  1. Rufen Sie in der Firebase Console die Seite Firebase Auth-Einstellungen auf.

    Zu den Firebase Auth-Einstellungen

    1. Wählen Sie im Navigationsbereich Nutzeraktionen aus.

    2. Wählen Sie Schutz vor E-Mail-Aufzählungen (empfohlen) aus.

  2. Klicken Sie auf Speichern.

Node.js

  1. Installieren Sie das Admin SDK.

  2. Sie haben folgende Möglichkeiten, den Schutz vor E-Mail-Aufzählungen zu aktivieren:

    • Für den Schutz auf Projektebene:

      import { getAuth } from 'firebase-admin/auth';
      
      getAuth().projectConfigManager().updateProjectConfig(
        {
          emailPrivacyConfig: {
            enableImprovedEmailPrivacy: true,
          },
        }
      );
      
    • Für den Schutz auf Mandantenebene:

      import { getAuth } from 'firebase-admin/auth';
      
      getAuth().tenantConfigManager().updateTenant(TENANT_ID,
        {
          emailPrivacyConfig: {
            enableImprovedEmailPrivacy: true,
          },
        }
      );
      

      Ersetzen Sie TENANT_ID durch die Mandanten-ID, für die Sie den Schutz vor E-Mail-Aufzählungen aktivieren möchten.

REST

  1. Drucken Sie in der Google Cloud Console mit dem Befehl gcloud auth print-access-token ein Zugriffstoken für Ihre Projekt-ID aus:

    gcloud auth print-access-token --project=PROJECT_ID
    
  2. Aktivieren Sie den Schutz vor E-Mail-Aufzählungen für Ihre Projekt-ID mit der Identity Toolkit API:

    curl -X PATCH -d "{'emailPrivacyConfig':{'enableImprovedEmailPrivacy':true}}" \
        -H 'Authorization: Bearer ACCESS_TOKEN' \
        -H 'Content-Type: application/json' -H 'X-Goog-User-Project: PROJECT_ID' \
        "https://identitytoolkit.googleapis.com/admin/v2/projects/PROJECT_ID/config?updateMask=emailPrivacyConfig"
    

Ersetzen Sie Folgendes:

  • ACCESS_TOKEN: das zuvor generierte Zugriffstoken
  • PROJECT_ID: Ihre Projekt-ID.

Schutz vor E-Mail-Aufzählungen deaktivieren

So deaktivieren Sie den Schutz vor E-Mail-Aufzählungen:

Firebase Console

  1. Rufen Sie in der Firebase Console die Seite Firebase Auth-Einstellungen auf.

    Zu den Firebase Auth-Einstellungen

    1. Wählen Sie im Navigationsbereich Nutzeraktionen aus.

    2. Entfernen Sie das Häkchen bei Schutz vor E-Mail-Aufzählungen (empfohlen).

  2. Klicken Sie auf Speichern.

Node.js

  1. Installieren Sie das Admin SDK.

  2. Sie haben folgende Möglichkeiten, den Schutz vor E-Mail-Aufzählungen zu deaktivieren:

    • Für den Schutz auf Projektebene:

      import { getAuth } from 'firebase-admin/auth';
      
      getAuth().projectConfigManager().updateProjectConfig(
        {
          emailPrivacyConfig: {
            enableImprovedEmailPrivacy: false,
          },
        }
      );
      
    • Für den Schutz auf Mandantenebene:

      import { getAuth } from 'firebase-admin/auth';
      
      getAuth().tenantConfigManager().updateTenant(TENANT_ID,
        {
          emailPrivacyConfig: {
            enableImprovedEmailPrivacy: false,
          },
        }
      );
      

      Ersetzen Sie TENANT_ID durch die Mandanten-ID, für die Sie den Schutz vor E-Mail-Aufzählungen deaktivieren möchten.

REST

  1. Drucken Sie in der Google Cloud Console mit dem Befehl gcloud auth print-access-token ein Zugriffstoken für Ihre Projekt-ID aus:

    gcloud auth print-access-token --project=PROJECT_ID
    
  2. Deaktivieren Sie den Schutz vor E-Mail-Aufzählungen mit der Identity Toolkit API:

    curl -X PATCH -d "{'emailPrivacyConfig':{'enableImprovedEmailPrivacy':false}}" \
        -H 'Authorization: Bearer ACCESS_TOKEN' \
        -H 'Content-Type: application/json' -H 'X-Goog-User-Project: PROJECT_ID' \
        "https://identitytoolkit.googleapis.com/admin/v2/projects/PROJECT_ID/config?updateMask=emailPrivacyConfig"
    

Ersetzen Sie Folgendes:

  • ACCESS_TOKEN: das zuvor generierte Zugriffstoken
  • PROJECT_ID: Ihre Projekt-ID.

Beispiel für eine Fehlerantwort

Wenn ein Nutzer versucht, sich mit einer falschen E-Mail-Adresse oder einem falschen Passwort anzumelden, oder versucht, sich mit einer bereits im System vorhandenen E-Mail-Adresse zu registrieren, gibt Identity Platform einen Fehler wie den folgenden zurück:

{
"code": "auth/internal-error",
"message": "{\"error\":{\"code\":400,\"message\":\"INVALID_LOGIN_CREDENTIALS\",\"errors\":[{\"message\":\"INVALID_LOGIN_CREDENTIALS\",\"domain\":\"global\",\"reason\":\"invalid\"}]}}"
}