Schutz vor E-Mail-Enumeration aktivieren oder deaktivieren
In diesem Leitfaden wird die Funktion zum Schutz vor E-Mail-Enumeration erläutert und gezeigt, wie Sie sie aktivieren und deaktivieren. Wenn Sie Ihr Projekt am oder nach dem 15. September 2023 erstellt haben, ist der Schutz vor E-Mail-Enumeration standardmäßig aktiviert.
Übersicht
E-Mail-Enumeration ist eine Art 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 bei 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 den Fehler
EMAIL_NOT_FOUNDzurück.Es wird versucht, sich mit einer E-Mail-Adresse zu registrieren, die bereits im System vorhanden ist. Identity Platform gibt den Fehler
EMAIL_EXISTSzurück.
Mit der Funktion zum Schutz vor E-Mail-Enumeration von Identity Platform können Sie Nutzerkonten in Ihrer App vor diesen Angriffen schützen.
Wenn der Schutz vor E-Mail-Enumeration aktiviert ist, verhält sich Ihr Projekt so:
Die
fetchSignInForEmailAPI schlägt fehl. Außerdem können anonyme authentifizierte Nutzer vor SDK-Version 22.3.0 für Android, 10.18.0 für iOS und 10.6.0 für das Web nicht mit einer E-Mail-Adresse verknüpft werden.Beim Aufrufen der
createAuthUriREST API oder derfetchSignInMethodsForEmailClient 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, nachdem sie die neue Adresse bestätigt haben. So können Sie die E-Mail-Adresse eines Nutzers beispielsweise nicht mehr mit der
updateREST API, dersetAccountInfoREST API, oder derupdateEmailClient SDK-Methode auf allen Plattformen ändern.Stattdessen können Sie
verifyBeforeUpdateEmailfür das Web und Android odersendEmailVerification(beforeUpdatingEmail:)für iOS verwenden.Sie können die
setAccountInfoREST API nicht mehr verwenden, um einen E-Mail-/Passwortanbieter mit einem vorhandenen Nutzerkonto zu verknüpfen. Sie können dielinkWithCredentialClient SDK-Methode auf keiner Plattform mehr mit einemEmailAuthCredentialverwenden. Verwenden Sie stattdessen die REST APIsignUpund übergeben Sie das ID-Token des Nutzers im FeldidTokenund die Felderemailundpasswordzum Verknüpfen.Entfernt Fehlerantworten für E-Mail-Bestätigungsabläufe, einschließlich Abläufen, die initiiert wurden durch Aufrufen der
sendOobCodeREST API mit den AnfragetypenVERIFY_AND_CHANGE_EMAILoderPASSWORD_RESETund durch Aufrufen vonverifyBeforeUpdateEmailfür das Web und Android,sendEmailVerification(beforeUpdatingEmail:)für iOS, odersendPasswordResetEmailauf allen Plattformen.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 gibt es keine spezifischen Fehlermeldungen, die angeben, wann E-Mails nicht gesendet werden.
Wir empfehlen, Nutzern nicht zu erlauben, sich ohne E-Mail-Bestätigungsablauf zu registrieren.
Bei ungültigen Anmeldefällen wird die Fehlerantwort
INVALID_LOGIN_CREDENTIALSzurückgegeben. Bei ungültigen Registrierungsfällen werden weiterhinEMAIL_EXISTS-Fehler zurückgegeben. Empfehlungen finden Sie im nächsten Abschnitt.
Wenn Ihre App auf einem der Verhaltensweisen basiert, die durch den Schutz vor E-Mail-Enumeration geändert wurden, können Sie ihn deaktivieren. Dies wird jedoch langfristig nicht empfohlen. Weitere Informationen finden Sie im folgenden Abschnitt.
Sicherheitsempfehlungen
Eine der gängigsten Methoden für einen Angriff zur Kontoübernahme ist das Credential Stuffing mit Anmeldedaten, die offengelegt wurden oder leicht zu erraten sind. 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-Enumeration 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-Enumeration standardmäßig aktiviert. Wir empfehlen, den Schutz vor E-Mail-Enumeration aktiviert zu lassen und sich nicht auf eines der Verhaltensweisen zu verlassen, die weiter oben in diesem Leitfaden aufgeführt sind.
Wenn Sie Ihr Projekt vor dem 15. September 2023 erstellt haben, wird der Schutz vor E-Mail-Enumeration nicht automatisch aktiviert.
Wenn Ihre Apps nicht auf einem der Verhaltensweisen basieren, die weiter oben in diesem Leitfaden beschrieben sind, empfehlen wir, den Schutz vor E-Mail-Enumeration sofort zu aktivieren.
Wenn Ihre Apps auf einem der oben beschriebenen Verhaltensweisen basieren, empfehlen wir, die Migration so schnell wie möglich zu starten und den Schutz vor E-Mail-Enumeration so bald wie möglich zu aktivieren.
Zusätzlich zum Schutz vor E-Mail-Enumeration sollten Sie Maßnahmen ergreifen, um den Missbrauch der Registrierungsendpunkte Ihres Projekts zu verhindern, die weiterhin EMAIL_EXISTS-Fehler zurückgeben. Hier einige Möglichkeiten:
- App Check aktivieren
- reCAPTCHA in Ihren Registrierungsablauf einbinden
- Die Anmeldung mit E-Mail-Adressen und Passwörtern oder E-Mail-Links nicht zulassen und stattdessen alternative Methoden wie die Google-Anmeldung verwenden
Schutz vor E-Mail-Enumeration aktivieren
So aktivieren Sie den Schutz vor E-Mail-Enumeration:
Firebase Console
Rufen Sie in der Firebase Console die Seite Authentifizierungseinstellungen auf.
Authentifizierungseinstellungen aufrufen
Wählen Sie im Bereich Nutzerkontoverwaltung die Option Nutzeraktionen aus.
Wählen Sie Schutz vor E-Mail-Enumeration (empfohlen) aus.
Klicken Sie auf Speichern.
REST
Geben Sie in der Google Cloud console ein Zugriffstoken für Ihre Projekt-ID mit dem
gcloud auth print-access-tokenBefehl aus:gcloud auth print-access-token --project=PROJECT_IDAktivieren Sie den Schutz vor E-Mail-Enumeration 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-Enumeration:
Firebase Console
Rufen Sie in der Firebase Console die Seite Authentifizierungseinstellungen auf.
Authentifizierungseinstellungen aufrufen
Wählen Sie im Bereich Nutzerkontoverwaltung die Option Nutzeraktionen aus.
Deaktivieren Sie Schutz vor E-Mail-Enumeration (empfohlen).
Klicken Sie auf Speichern.
REST
Geben Sie in der Google Cloud console ein Zugriffstoken für Ihre Projekt-ID mit dem
gcloud auth print-access-tokenBefehl aus:gcloud auth print-access-token --project=PROJECT_IDDeaktivieren Sie den Schutz vor E-Mail-Enumeration 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 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\"}]}}"
}