Activer ou désactiver la protection contre l'énumération des adresses e-mail
Ce guide explique la fonctionnalité de protection contre l'énumération des adresses e-mail et vous explique comment 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 des adresses e-mail est un type d'attaque par force brute dans laquelle un acteur malveillant tente de deviner ou de confirmer les utilisateurs d'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
.Une tentative d'inscription est effectuée 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 un fournisseur d'adresse e-mail/de 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
,password
à 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 demandez à réinitialiser votre mot de passe, un e-mail de validation n'est envoyé que si l'adresse e-mail existe. Lorsque vous demandez à modifier votre adresse e-mail, un e-mail de validation n'est envoyé que si l'adresse e-mail n'existe pas déjà. 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 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, cela n'est pas recommandé à 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 peut également être utilisée pour obtenir des informations sensibles sur vos utilisateurs ou pour les attaquer par hameçonnage. Pour ces raisons, Google vous conseille d'utiliser la fonctionnalité de protection contre l'énumération des adresses e-mail pour protéger vos applications contre ce type d'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 la protection contre l'énumération des adresses e-mail activée et de ne pas vous fier à l'un des comportements listés précédemment dans ce guide.
Si vous avez créé votre projet avant le 15 septembre 2023, la protection contre l'énumération des adresses e-mail n'est pas automatiquement activée.
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 des adresses e-mail, envisagez de prendre des mesures pour éviter tout abus des points de terminaison d'inscription de votre projet qui continuent de renvoyer des erreurs EMAIL_EXISTS
. Voici quelques façons de procéder:
- 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 des adresses e-mail, procédez comme suit:
Console Firebase
Dans la console Firebase, accédez à la page Paramètres Firebase Auth.
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 des adresses e-mail, utilisez l'une des méthodes suivantes:
Pour la protection au niveau du projet:
import { getAuth } from 'firebase-admin/auth'; getAuth().projectConfigManager().updateProjectConfig( { emailPrivacyConfig: { enableImprovedEmailPrivacy: true, }, } );
Pour une 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 de locataire pour lequel vous souhaitez activer 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
Activez la protection contre l'énumération des 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 Firebase Auth.
Accéder aux paramètres Firebase Auth
Dans le volet de navigation, sélectionnez Actions des utilisateurs.
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 des adresses e-mail, utilisez l'une des méthodes 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 des 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 s'il tente de s'inscrire avec une adresse e-mail déjà existante 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\"}]}}"
}