Schutz vor E-Mail-Aufzählung aktivieren oder deaktivieren

In diesem Leitfaden wird die Funktion zum Schutz vor E-Mail-Aufzählung erläutert und es wird beschrieben, wie Sie sie aktivieren und deaktivieren. Wenn Sie Ihr Projekt am oder nach dem 15. September 2023 erstellt haben, ist der Schutz vor der Aufzählung von E‑Mail-Adressen standardmäßig aktiviert.

Übersicht

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-Enumeration gibt Identity Platform Informationen zurück, die in einem E-Mail-Enumerationsangriff verwendet werden können:

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

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

Mit der E-Mail-Aufzählungsfunktion von Identity Platform können Sie Nutzerkonten in Ihrer App vor diesen Angriffen schützen.

Wenn der Schutz vor E‑Mail-Aufzählung aktiviert ist, verhält sich Ihr Projekt so:

  • Die fetchSignInForEmail API schlägt fehl. Das Verknüpfen anonym authentifizierter Nutzer mit einer E-Mail-Adresse ist vor SDK-Version 22.3.0 für Android, 10.18.0 für iOS und 10.6.0 für das Web ebenfalls nicht möglich.

  • Beim Aufrufen der createAuthUri REST API oder der fetchSignInMethodsForEmail Client SDK-Methode auf allen Plattformen wird keine Liste der Anmeldemethoden für eine bestimmte E-Mail-Adresse mehr zurückgegeben.

  • Nutzer können ihre E‑Mail-Adresse erst ändern, wenn sie die neue Adresse bestätigt haben. So können Sie beispielsweise die E-Mail-Adresse eines Nutzers nicht mehr mit der update REST API, der setAccountInfo REST API oder der Client-SDK-Methode updateEmail auf allen Plattformen ändern.

    Sie können stattdessen verifyBeforeUpdateEmail für Web und Android oder sendEmailVerification(beforeUpdatingEmail:) für iOS verwenden.

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

  • Entfernt Fehlerantworten für E-Mail-Bestätigungsabläufe, einschließlich Abläufe, die durch Aufrufen der sendOobCode REST API mit den Anfragetypen VERIFY_AND_CHANGE_EMAIL oder PASSWORD_RESET und durch Aufrufen von verifyBeforeUpdateEmail für Web und Android, sendEmailVerification(beforeUpdatingEmail:) für iOS oder sendPasswordResetEmail auf allen Plattformen initiiert wurden.

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

    Wir empfehlen, dass Sie Nutzern nicht erlauben, sich ohne E-Mail-Bestätigung zu registrieren.

  • Bei ungültigen Anmeldevorgängen wird eine INVALID_LOGIN_CREDENTIALS-Fehlerantwort zurückgegeben. Bei ungültigen Registrierungen werden weiterhin EMAIL_EXISTS-Fehler zurückgegeben. Weitere Informationen finden Sie im nächsten Abschnitt.

Wenn Ihre App auf einem der Verhaltensweisen basiert, die durch den Schutz vor der Aufzählung von E-Mail-Adressen geändert wurden, können Sie diesen Schutz deaktivieren. Dies ist jedoch langfristig nicht empfehlenswert. Weitere Informationen finden Sie im nächsten Abschnitt.

Sicherheitsempfehlungen

Eine der gängigsten Methoden für Kontoübernahmeangriffe ist das Credential Stuffing mit Anmeldedaten, die durch Datenlecks offengelegt wurden oder leicht zu erraten sind. Die E-Mail-Enumeration kann auch verwendet werden, um vertrauliche Informationen über Ihre Nutzer zu erhalten oder Phishing-Angriffe gegen sie durchzuführen. Aus diesen Gründen empfiehlt Google, die Funktion zum Schutz vor E-Mail-Aufzählung zu verwenden, um Ihre Apps vor solchen Angriffen zu schützen.

  • Wenn Sie Ihr Projekt am oder nach dem 15. September 2023 erstellt haben, ist der Schutz vor der Aufzählung von E‑Mail-Adressen standardmäßig aktiviert. Wir empfehlen, den Schutz vor der Aufzählung von E-Mail-Adressen aktiviert zu lassen und nicht auf die Verhaltensweisen zu setzen, die weiter oben in diesem Leitfaden aufgeführt sind.

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

    Wenn Ihre Apps nicht auf einem der oben beschriebenen Verhaltensweisen basieren, empfehlen wir, den Schutz vor E-Mail-Aufzählung sofort zu aktivieren.

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

Zusätzlich zum Schutz vor E‑Mail-Aufzählung sollten Sie Maßnahmen ergreifen, um Missbrauch der Registrierungs-Endpunkte Ihres Projekts zu verhindern, die weiterhin EMAIL_EXISTS-Fehler zurückgeben. Dazu haben Sie mehrere Möglichkeiten:

  • Aktivieren Sie App Check.
  • Binden Sie reCAPTCHA in Ihren Registrierungsprozess ein.
  • Die Anmeldung mit E-Mail-Adressen und Passwörtern oder E-Mail-Links ist nicht zulässig. Stattdessen müssen alternative Methoden wie die Google-Anmeldung verwendet werden.

Schutz vor E‑Mail-Enumeration aktivieren

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

Firebase Console

  1. Rufen Sie in der Firebase Console die Seite Authentifizierungseinstellungen auf.

    Zu den Authentifizierungseinstellungen

    1. Wählen Sie im Bereich Nutzerkontoverwaltung die Option Nutzeraktionen aus.

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

  2. Klicken Sie auf Speichern.

Node.js

  1. Installieren Sie das Admin SDK.

  2. Um den Schutz vor der Aufzählung von E-Mail-Adressen zu aktivieren, haben Sie folgende Möglichkeiten:

    • So schützen Sie Projekte:

      import { getAuth } from 'firebase-admin/auth';
      
      getAuth().projectConfigManager().updateProjectConfig(
        {
          emailPrivacyConfig: {
            enableImprovedEmailPrivacy: true,
          },
        }
      );
      
    • 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ählung aktivieren möchten.

REST

  1. Geben Sie in der Google Cloud -Konsole mit dem gcloud auth print-access-token-Befehl 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ählung 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 Zugriffstoken, das Sie zuvor generiert haben
  • PROJECT_ID: Ihre Projekt-ID.

Schutz vor E‑Mail-Enumeration deaktivieren

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

Firebase Console

  1. Rufen Sie in der Firebase Console die Seite Authentifizierungseinstellungen auf.

    Zu den Authentifizierungseinstellungen

    1. Wählen Sie im Bereich Nutzerkontoverwaltung die Option Nutzeraktionen aus.

    2. Deaktivieren Sie Schutz vor E-Mail-Enumeration (empfohlen).

  2. Klicken Sie auf Speichern.

Node.js

  1. Installieren Sie das Admin SDK.

  2. Um den Schutz vor der Aufzählung von E‑Mail-Adressen zu deaktivieren, verwenden Sie eine der folgenden Optionen:

    • So schützen Sie Projekte:

      import { getAuth } from 'firebase-admin/auth';
      
      getAuth().projectConfigManager().updateProjectConfig(
        {
          emailPrivacyConfig: {
            enableImprovedEmailPrivacy: false,
          },
        }
      );
      
    • 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 der Auflistung von E-Mail-Adressen deaktivieren möchten.

REST

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

    gcloud auth print-access-token --project=PROJECT_ID
    
  2. Schutz vor E-Mail-Aufzählung mit der Identity Toolkit API deaktivieren:

    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 Zugriffstoken, das Sie zuvor generiert haben
  • 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 E-Mail-Adresse zu registrieren, die bereits im System vorhanden ist, gibt Identity Platform einen Fehler ähnlich dem folgenden zurück:

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