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 d'adresses e-mail et vous montre 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 d'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 lequel 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.

  • 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 d'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 d'adresses e-mail est activée, votre projet présente le comportement suivant :

  • L'API fetchSignInForEmail échouera. Il ne sera pas non plus possible d'associer des utilisateurs authentifiés anonymes à une adresse e-mail 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 des méthodes de connexion pour une adresse e-mail spécifiée n'est plus renvoyée lorsque vous appelez la méthode createAuthUri de l'API REST ou la méthode fetchSignInMethodsForEmail du SDK client sur toutes les plates-formes.

  • Les utilisateurs ne peuvent pas modifier leur adresse e-mail sans d'abord valider la nouvelle adresse. Par exemple, vous ne pouvez plus modifier l'adresse e-mail d'un utilisateur avec l'API REST update, l'API REST setAccountInfo ni la méthode du SDK client updateEmail sur toutes les plates-formes.

    Vous pouvez utiliser verifyBeforeUpdateEmail pour le Web et Android, ou sendEmailVerification(beforeUpdatingEmail:) pour iOS.

  • Vous ne pouvez plus utiliser l'API REST setAccountInfo pour associer un fournisseur d'adresse e-mail/mot de passe à un compte utilisateur existant. Vous ne pouvez plus utiliser la méthode du SDK client linkWithCredential avec un EmailAuthCredential sur aucune plate-forme. Utilisez plutôt l'API REST signUp en transmettant le jeton d'ID de l'utilisateur dans le champ idToken et les champs email et password à associer.

  • Supprime les réponses d'erreur pour les flux de validation d'adresse e-mail, y compris les flux initiés en appelant l'API REST sendOobCode avec les types de requête VERIFY_AND_CHANGE_EMAIL ou PASSWORD_RESET, et en appelant verifyBeforeUpdateEmail pour le Web et Android, sendEmailVerification(beforeUpdatingEmail:) pour iOS ou sendPasswordResetEmail 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 d'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 erreurs EMAIL_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 d'adresses e-mail, vous pouvez la désactiver. Toutefois, cette solution n'est pas recommandée à long terme. Pour en savoir plus, consultez la section suivante.

Recommandations pour améliorer la sécurité

L'une des méthodes les plus courantes pour effectuer une attaque par prise de contrôle de compte consiste à effectuer des attaques par credential stuffing à 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 lancer des attaques par hameçonnage contre eux. Pour ces raisons, Google vous 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 d'adresses e-mail est activée par défaut. Nous vous recommandons de laisser la protection contre l'énumération d'adresses e-mail activée et de ne pas vous fier aux comportements listés plus haut dans ce guide.

  • Si vous avez créé votre projet avant le 15 septembre 2023, la protection contre l'énumération d'adresses e-mail n'est pas activée automatiquement.

    Si vos applications ne reposent sur aucun des comportements décrits plus haut dans ce guide, nous vous recommandons d'activer immédiatement la protection contre l'énumération d'adresses e-mail.

    Si vos applications reposent sur l'un des comportements décrits précédemment, nous vous recommandons de commencer à migrer et d'activer la protection contre l'énumération d'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 pour éviter l'utilisation abusive des points de terminaison d'inscription de votre projet qui continuent de renvoyer des erreurs EMAIL_EXISTS. Voici quelques exemples :

  • Activez App Check.
  • Intégrez reCAPTCHA à votre processus d'inscription.
  • Interdisez la connexion avec des adresses e-mail et des mots de passe ou des liens envoyés par e-mail, et utilisez plutôt d'autres méthodes, comme la connexion avec 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

  1. Dans la console Firebase, accédez à la page Paramètres d'authentification.

    Accéder aux paramètres d'authentification

    1. Dans le volet Gestion des comptes utilisateur, sélectionnez Actions utilisateur.

    2. Sélectionnez Protection contre l'énumération d'adresses e-mail (recommandé).

  2. Cliquez sur Enregistrer.

REST

  1. Dans la console Google Cloud , affichez 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
    
  2. 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 d'adresses e-mail, procédez comme suit :

Console Firebase

  1. Dans la console Firebase, accédez à la page Paramètres d'authentification.

    Accéder aux paramètres d'authentification

    1. Dans le volet Gestion des comptes utilisateur, sélectionnez Actions utilisateur.

    2. Décochez la case Protection contre l'énumération d'adresses e-mail (recommandé).

  2. Cliquez sur Enregistrer.

REST

  1. Dans la console Google Cloud , affichez 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
    
  2. 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\"}]}}"
}