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 client fetchSignInMethodsForEmail 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 REST setAccountInfo ou 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 une 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, tels que ceux lancés en appelant l'API REST sendOobCode avec les types de requêtes VERIFY_AND_CHANGE_EMAIL ou PASSWORD_RESET, et lors de l'appel de verifyBeforeUpdateEmail pour le Web et Android, sendEmailVerification(beforeUpdatingEmail:) pour iOS ou des méthodes du SDK client sendPasswordResetEmail 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 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 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

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

    Accéder aux paramètres Firebase Auth

    1. Dans le volet de navigation, sélectionnez Actions des utilisateurs.

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

  2. Cliquez sur Enregistrer.

Node.js

  1. Installez le SDK Admin.

  2. 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

  1. 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
    
  2. 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

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

    Accéder aux paramètres Firebase Auth

    1. Dans le volet de navigation, sélectionnez Actions de l'utilisateur.

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

  2. Cliquez sur Enregistrer.

Node.js

  1. Installez le SDK Admin.

  2. 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

  1. 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
    
  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\"}]}}"
}