Activer ou désactiver la protection contre l'énumération des adresses e-mail
Ce guide décrit la fonctionnalité de protection contre l'énumération d'adresses e-mail et vous indique comment pour l'activer et la désactiver. Si vous avez créé votre projet le 15 septembre 2023 ou après, la protection contre l'énumération des adresses e-mail est activée par défaut.
Présentation
L'énumération d'adresses e-mail est un type d'attaque par force brute dans laquelle un acteur malveillant tente de deviner ou de confirmer des utilisateurs dans un système en transmettant une adresse e-mail à l'API et en vérifiant la réponse.
Sans protection contre l'énumération d'adresses e-mail, Identity Platform renvoie des informations pouvant être utilisées dans une attaque par énumération d'adresses e-mail :
Une tentative de connexion est effectuée avec une adresse e-mail qui n'existe pas dans le système. Identity Platform renvoie une erreur
EMAIL_NOT_FOUND
.Tentative d'inscription avec une adresse e-mail qui existe déjà dans le système. Identity Platform renvoie une erreur
EMAIL_EXISTS
.
Vous pouvez utiliser la fonctionnalité de protection contre l'énumération des adresses e-mail d'Identity Platform pour protéger les comptes utilisateur de votre application contre ces attaques.
Lorsque la protection contre l'énumération des adresses e-mail est activée, votre projet présente le comportement suivant :
L'API
fetchSignInForEmail
échouera. L'association d'utilisateurs authentifiés anonymes à une adresse e-mail ne fonctionnera pas avant la version 22.3.0 du SDK pour Android, la version 10.18.0 pour iOS et la version 10.6.0 pour le Web.Une liste de méthodes de connexion pour une adresse e-mail spécifiée n'est plus renvoyée lors de l'appel de l'API REST
createAuthUri
ou de la méthode du SDK clientfetchSignInMethodsForEmail
sur toutes les plates-formes.Les utilisateurs ne peuvent pas modifier leur adresse e-mail sans d'abord la valider. Par exemple, vous ne pouvez plus modifier l'adresse e-mail d'un utilisateur avec l'API REST
update
, l'API RESTsetAccountInfo
ou la méthode du SDK clientupdateEmail
sur toutes les plates-formes.Vous pouvez utiliser
verifyBeforeUpdateEmail
pour le Web et Android, ousendEmailVerification(beforeUpdatingEmail:)
pour iOS.Vous ne pouvez plus utiliser l'API REST
setAccountInfo
pour associer une adresse e-mail/mot de passe à un compte utilisateur existant. Vous ne pouvez plus utiliser la méthode du SDK clientlinkWithCredential
avec unEmailAuthCredential
sur aucune plate-forme. Utilisez plutôt l'API RESTsignUp
, en transmettant le jeton d'ID de l'utilisateur dans le champidToken
et les champsemail
etpassword
à associer.Supprime les réponses d'erreur pour les flux de validation d'adresse e-mail, tels que ceux lancés en appelant l'API REST
sendOobCode
avec les types de requêtesVERIFY_AND_CHANGE_EMAIL
ouPASSWORD_RESET
, et lors de l'appel deverifyBeforeUpdateEmail
pour le Web et Android,sendEmailVerification(beforeUpdatingEmail:)
pour iOS ou des méthodes du SDK clientsendPasswordResetEmail
sur toutes les plates-formes.Lorsque vous effectuez une demande de réinitialisation de mot de passe, un e-mail de validation n'est envoyé l'adresse e-mail existe ; lorsque vous effectuez une demande de changement d'adresse e-mail, l'e-mail de validation n'est envoyé que si l'adresse e-mail n'existe pas encore. Dans les deux cas, aucun message d'erreur spécifique n'indique quand les e-mails ne sont pas envoyés.
Nous vous recommandons de ne pas autoriser les utilisateurs à s'inscrire sans un flux de validation de l'adresse e-mail.
Les cas de connexion non valides renvoient une réponse d'erreur
INVALID_LOGIN_CREDENTIALS
. Les cas d'inscription non valides continuent de renvoyer des erreursEMAIL_EXISTS
. Consultez les recommandations de la section suivante.
Si votre application repose sur l'un des comportements modifiés par la protection contre l'énumération des adresses e-mail, vous pouvez actuellement la désactiver. Toutefois, ce n'est pas que nous recommandons à long terme, consultez la section suivante.
Recommandations pour améliorer la sécurité
L'une des méthodes les plus courantes pour effectuer une attaque par piratage de compte consiste à effectuer des attaques par remplissage d'identifiants à l'aide d'identifiants divulgués ou faciles à deviner. L'énumération d'adresses e-mail permet également d'obtenir des informations sensibles les utilisateurs ou de pratiquer des attaques de hameçonnage à leur encontre. C'est pourquoi Google conseille d'utiliser la fonctionnalité de protection contre l'énumération d'adresses e-mail. pour protéger vos applications contre de telles attaques.
Si vous avez créé votre projet le 15 septembre 2023 ou après, la protection contre l'énumération des adresses e-mail est activée par défaut. Nous vous recommandons de laisser un e-mail protection contre les énumérations et ne pas s'appuyer sur l'un des comportements mentionnées plus tôt dans ce guide.
Si vous avez créé votre projet avant le 15 septembre 2023, l'énumération d'adresses e-mail n'est pas activée automatiquement.
Si vos applications ne reposent sur aucun des comportements décrits précédemment dans ce guide, nous vous recommandons d'activer immédiatement la protection contre l'énumération des adresses e-mail.
Si vos applications s'appuient sur l'un des comportements décrits précédemment, nous vous recommandons de commencer à les abandonner et d'activer la protection contre l'énumération des adresses e-mail dès que possible.
En plus d'utiliser la protection contre l'énumération d'adresses e-mail, envisagez de prendre des mesures
empêchez l'utilisation abusive des points de terminaison d'inscription de votre projet qui continuent de renvoyer
EMAIL_EXISTS
erreur. Pour ce faire, procédez comme suit:
- Activez App Check.
- Intégrez reCAPTCHA à votre parcours d'inscription.
- Interdisez la connexion à l'aide d'adresses e-mail et de mots de passe ou de liens d'e-mail, et utilisez plutôt d'autres méthodes, comme la connexion Google.
Activer la protection contre l'énumération d'adresses e-mail
Pour activer la protection contre l'énumération d'adresses e-mail, procédez comme suit:
Console Firebase
Dans la console Firebase, accédez à la page Paramètres d'authentification Firebase.
Accéder aux paramètres Firebase Auth
Dans le volet de navigation, sélectionnez Actions des utilisateurs.
Sélectionnez Protection contre l'énumération d'adresses e-mail (recommandé).
Cliquez sur Enregistrer.
Node.js
Installez le SDK Admin.
Pour activer la protection contre l'énumération d'adresses e-mail, utilisez l'une des options suivantes:
Pour assurer la protection au niveau du projet:
import { getAuth } from 'firebase-admin/auth'; getAuth().projectConfigManager().updateProjectConfig( { emailPrivacyConfig: { enableImprovedEmailPrivacy: true, }, } );
Pour la protection au niveau du locataire :
import { getAuth } from 'firebase-admin/auth'; getAuth().tenantConfigManager().updateTenant(TENANT_ID, { emailPrivacyConfig: { enableImprovedEmailPrivacy: true, }, } );
Remplacez
TENANT_ID
par l'ID du locataire que vous pour lesquels activer la protection contre l'énumération d'adresses e-mail.
REST
Dans la console Google Cloud, imprimez un jeton d'accès pour votre ID de projet à l'aide de la commande
gcloud auth print-access-token
:gcloud auth print-access-token --project=PROJECT_ID
Activez la protection contre l'énumération d'adresses e-mail pour votre ID de projet à l'aide de l'API Identity Toolkit:
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"
Remplacez les éléments suivants :
- ACCESS_TOKEN: jeton d'accès que vous avez généré précédemment
- PROJECT_ID : ID de votre projet.
Désactiver la protection contre l'énumération d'adresses e-mail
Pour désactiver la protection contre l'énumération des adresses e-mail, procédez comme suit :
Console Firebase
Dans la console Firebase, accédez à la page Paramètres de l'authentification Firebase.
Accéder aux paramètres Firebase Auth
Dans le volet de navigation, sélectionnez Actions de l'utilisateur.
Décochez la case Protection contre l'énumération d'adresses e-mail (recommandé).
Cliquez sur Enregistrer.
Node.js
Installez le SDK Admin.
Pour désactiver la protection contre l'énumération d'adresses e-mail, utilisez l'une des options suivantes:
Pour la protection au niveau du projet :
import { getAuth } from 'firebase-admin/auth'; getAuth().projectConfigManager().updateProjectConfig( { emailPrivacyConfig: { enableImprovedEmailPrivacy: false, }, } );
Pour la protection au niveau du locataire:
import { getAuth } from 'firebase-admin/auth'; getAuth().tenantConfigManager().updateTenant(TENANT_ID, { emailPrivacyConfig: { enableImprovedEmailPrivacy: false, }, } );
Remplacez
TENANT_ID
par l'ID de locataire pour lequel vous souhaitez désactiver la protection contre l'énumération des adresses e-mail.
REST
Dans la console Google Cloud, imprimez un jeton d'accès pour votre ID de projet à l'aide de la commande
gcloud auth print-access-token
:gcloud auth print-access-token --project=PROJECT_ID
Désactivez la protection contre l'énumération d'adresses e-mail à l'aide de l'API Identity Toolkit:
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"
Remplacez les éléments suivants :
- ACCESS_TOKEN: jeton d'accès que vous avez généré précédemment
- PROJECT_ID : ID de votre projet.
Exemple de réponse d'erreur
Si un utilisateur tente de se connecter avec une adresse e-mail ou un mot de passe incorrects, ou de s'inscrire avec une adresse e-mail qui existe déjà dans le système, Identity Platform renvoie une erreur semblable à celle-ci:
{
"code": "auth/internal-error",
"message": "{\"error\":{\"code\":400,\"message\":\"INVALID_LOGIN_CREDENTIALS\",\"errors\":[{\"message\":\"INVALID_LOGIN_CREDENTIALS\",\"domain\":\"global\",\"reason\":\"invalid\"}]}}"
}