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

In diesem Leitfaden wird die Funktion zum Schutz vor E-Mail-Enumeration erläutert und es wird erläutert, um sie zu aktivieren und zu deaktivieren. Wenn Sie Ihr Projekt am oder nach dem 15. September erstellt haben, 2023 ist der Schutz vor E-Mail-Enumeration 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 Angriff auf E-Mail-Enumeration 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 anzumelden, die bereits im System vorhanden ist. Die Identity Platform gibt den Fehler EMAIL_EXISTS zurück.

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

Wenn Schutz vor E-Mail-Enumeration aktiviert ist, weist Ihr Projekt folgendes Verhalten auf:

  • Die fetchSignInForEmail API schlägt fehl. Die Verknüpfung von anonym authentifizierten Nutzern mit einer E-Mail-Adresse funktioniert erst ab der SDK-Version 22.3.0 für Android, 10.18.0 für iOS und 10.6.0 für das Web.

  • Beim Aufruf einer E-Mail-Adresse wird keine Liste mit Anmeldemethoden mehr zurückgegeben. createAuthUri REST API oder fetchSignInMethodsForEmail client SDK-Methode auf allen Plattformen.

  • Nutzer können ihre E-Mail-Adresse nicht ändern, ohne die neue Adresse zuerst zu bestätigen. Beispielsweise können Sie die E-Mail-Adresse mit dem update die REST API von setAccountInfo, oder die updateEmail client SDK-Methode auf allen Plattformen.

    Sie können 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 eine E-Mail-Adresse/ein Passwort zu verknüpfen mit einem bestehenden Nutzerkonto verknüpfen. Die Client SDK-Methode linkWithCredential mit einem EmailAuthCredential kann auf keiner Plattform mehr verwendet werden. Verwenden Sie stattdessen die REST API signUp und übergeben Sie das ID-Token des Nutzers im Feld idToken sowie die zu verknüpfenden Felder email und password.

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

    Wenn Sie einen Antrag auf Passwortzurücksetzung stellen, wird nur dann eine Bestätigungs-E-Mail gesendet, wenn die E-Mail-Adresse existiert. Wenn Sie einen Antrag auf Änderung der E-Mail-Adresse stellen, wird nur dann eine Bestätigungs-E-Mail gesendet, wenn die E-Mail-Adresse noch nicht existiert. In werden keine spezifischen Fehlermeldungen angezeigt, die darauf hinweisen, dass E-Mails gesendet.

    Nutzern die Anmeldung ohne E-Mail-Adresse nicht erlauben des Bestätigungsvorgangs.

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

Wenn Ihre App eines der durch den Schutz vor E-Mail-Aufzählungen geänderten Verhaltensweisen benötigt, können Sie ihn derzeit deaktivieren. Dies ist jedoch langfristig nicht empfehlenswert. Weitere Informationen finden Sie im folgenden Abschnitt.

Sicherheitsempfehlungen

Eine der häufigsten Methoden zur Durchführung eines Angriffs auf eine Kontoübernahme ist die Sie führen Credential Stuffing-Angriffe mit gehackten oder leicht zu erfassenden Anmeldedaten aus. zu beantworten. Die E-Mail-Aufzählung kann auch dazu verwendet werden, vertrauliche Informationen über Ihre Nutzer zu erhalten oder Phishing-Angriffe auf sie durchzuführen. Aus diesen Gründen empfiehlt Google, die Funktion zum Schutz vor E-Mail-Aufzählungen 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 E-Mail-Aufzählungen standardmäßig aktiviert. Wir empfehlen, den Schutz vor E-Mail-Aufzählungen aktiviert zu lassen und keine der oben in diesem Leitfaden aufgeführten Verhaltensweisen zu verwenden.

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

    Wenn Ihre Apps keines der in diesem Leitfaden beschriebenen Verhaltensweisen nutzen, empfehlen wir Ihnen, den Schutz vor E-Mail-Aufzählungen sofort zu aktivieren.

    Wenn Ihre Apps eines der oben beschriebenen Verhaltensweisen nutzen, sollten Sie damit beginnen, diese zu migrieren und so schnell wie möglich den Schutz vor E-Mail-Aufzählungen zu aktivieren.

Zusätzlich zum Schutz vor E-Mail-Enumeration sollten Sie Maßnahmen ergreifen, Verhindern des Missbrauchs der Anmeldeendpunkte Ihres Projekts, die weiterhin zurückkehren EMAIL_EXISTS Fehler. Das geht so:

  • Aktivieren Sie App Check.
  • Binden Sie reCAPTCHA in den Registrierungsvorgang ein.
  • Deaktivieren Sie die Anmeldung mit E-Mail-Adressen und Passwörtern oder E-Mail-Links und verwenden Sie stattdessen alternative Methoden wie die Anmeldung über Google.

Schutz vor E-Mail-Enumeration 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-Enumeration (empfohlen) aus.

  2. Klicken Sie auf Speichern.

Node.js

  1. Installieren Sie das Admin SDK.

  2. Verwenden Sie eine der folgenden Optionen, um den Schutz vor E-Mail-Enumeration 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, die Sie für den Sie den Schutz vor E-Mail-Enumeration aktivieren möchten.

REST

  1. Geben 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-Enumeration für Ihre Projekt-ID mithilfe 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-Enumeration:

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. Deaktivieren Sie Schutz vor E-Mail-Enumeration (empfohlen).

  2. Klicken Sie auf Speichern.

Node.js

  1. Installieren Sie das Admin SDK.

  2. Verwenden Sie eine der folgenden Methoden, um 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 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, die Sie für die der Schutz vor E-Mail-Enumeration deaktiviert werden soll.

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-Enumeration mithilfe 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 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 eine E-Mail-Adresse hat, die bereits im System vorhanden ist, 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\"}]}}"
}