Ativar ou desativar a proteção contra enumeração de e-mails

Este guia explica o recurso de proteção contra enumeração de e-mails e mostra como ativá-lo e desativá-lo. Se você criou seu projeto em 15 de setembro ou após essa data, Em 2023, a proteção contra enumeração de e-mails será ativada por padrão.

Visão geral

A enumeração de e-mails é um tipo de ataque de força bruta no qual um usuário malicioso tenta adivinhar ou confirmar os usuários em um sistema passando um endereço de e-mail para a API e verificando a resposta.

Sem a proteção contra enumeração de e-mails, o Identity Platform retorna informações que podem ser usadas em um ataque de enumeração de e-mails:

  • É feita uma tentativa de login com um endereço de e-mail que não existe no sistema. O Identity Platform retorna um erro EMAIL_NOT_FOUND.

  • É feita uma tentativa de inscrição com um endereço de e-mail que já existe no sistema. O Identity Platform retorna um erro EMAIL_EXISTS.

Você pode usar o recurso de proteção contra enumeração de e-mails do Identity Platform para proteger as contas de usuários no seu app contra esses ataques.

Quando a proteção contra enumeração de e-mails é ativada, o projeto tem o seguinte comportamento:

  • A API fetchSignInForEmail vai falhar. A vinculação de usuários anônimos autenticados a um endereço de e-mail também não funcionará antes da versão 22.3.0 do SDK para Android, 10.18.0 para iOS e 10.6.0 para Web.

  • Uma lista de métodos de login para um endereço de e-mail especificado não é mais retornada ao chamar createAuthUri API REST ou a fetchSignInMethodsForEmail método SDK do cliente em todas as plataformas.

  • Os usuários não podem alterar o endereço de e-mail sem antes confirmar o novo endereço. Por exemplo, não é mais possível mudar o endereço de e-mail de um usuário com a API REST update, a API REST setAccountInfo ou o método do SDK de cliente updateEmail em todas as plataformas.

    Você pode usar o verifyBeforeUpdateEmail para Web e Android ou sendEmailVerification(beforeUpdatingEmail:) para iOS como alternativa.

  • Não é mais possível usar a API REST setAccountInfo para vincular um provedor de e-mail/senha a uma conta de usuário. Não é mais possível usar o método do SDK do cliente linkWithCredential com um EmailAuthCredential em qualquer plataforma. Em vez disso, use a API REST signUp, transmitindo o token de ID do usuário no campo idToken e os campos email e password a serem vinculados.

  • Remove respostas de erro para fluxos de verificação de e-mail, como os iniciados. chamando o método sendOobCode API REST com tipos de solicitação VERIFY_AND_CHANGE_EMAIL ou PASSWORD_RESET e ao chamar verifyBeforeUpdateEmail para Web e Android, sendEmailVerification(beforeUpdatingEmail:) para iOS, ou sendPasswordResetEmail métodos do SDK do cliente em todas as plataformas.

    Quando você faz uma solicitação de redefinição de senha, um e-mail de verificação é enviado apenas se o endereço de e-mail existe; quando você faz uma solicitação de alteração de endereço de e-mail, o e-mail de verificação será enviado somente se o endereço de e-mail não existir. Em em ambos os casos, não há mensagens de erro específicas indicando quando os e-mails não são enviada.

    Recomendamos que você não permita que os usuários se inscrevam sem um fluxo de verificação por e-mail.

  • Casos de login inválidos retornam uma resposta de erro INVALID_LOGIN_CREDENTIALS. Casos de inscrição inválidos continuam retornando erros EMAIL_EXISTS. Consulte as recomendações na próxima seção.

Se o app depende de algum dos comportamentos alterados pela enumeração de e-mails ela pode ser desativada no momento. No entanto, isso não é recomendado a longo prazo. Consulte a próxima seção.

Recomendações de segurança

Um dos métodos mais comuns para realizar um ataque de invasão de conta é realizar ataques de preenchimento de credenciais com credenciais vazadas ou fáceis de adivinhar. A enumeração de e-mails também pode ser usada para conseguir informações sensíveis sobre seus usuários ou para realizar ataques de phishing contra eles. Por esses motivos, o Google recomenda usar o recurso de proteção contra enumeração de e-mails para proteger seus apps contra esses ataques.

  • Se você criou o projeto em 15 de setembro de 2023 ou depois, a proteção contra enumeração de e-mails está ativada por padrão. Recomendamos que você deixe a proteção de enumeração de e-mails ativada e não confie em nenhum dos comportamentos listados anteriormente neste guia.

  • Se você criou o projeto antes de 15 de setembro de 2023, a enumeração de e-mails não é ativada automaticamente.

    Se os apps não dependerem de nenhum dos comportamentos descritos anteriormente neste guia, recomendamos que você ative a proteção contra enumeração de e-mails imediatamente.

    Caso seus apps dependam de algum dos comportamentos descritos anteriormente, recomendamos que você você começar a migrar isso e ativar a enumeração de e-mails proteção assim que possível.

Além de usar a proteção contra enumeração de e-mails, considere tomar medidas para evite o abuso dos endpoints de inscrição do seu projeto que continuam a retornar EMAIL_EXISTS erro. Confira algumas maneiras de fazer isso:

  • Ative o App Check.
  • Integrar o reCAPTCHA à sua inscrição fluxo
  • Não permitir o login com endereços de e-mail e senhas ou links de e-mail e use métodos alternativos, como o Login do Google.

Ativar a proteção contra enumeração de e-mails

Para ativar a proteção contra enumeração de e-mails, siga estas etapas:

Console do Firebase

  1. No console do Firebase, acesse a página Configurações do Firebase Auth.

    Acessar as configurações do Firebase Auth

    1. No painel de navegação, selecione Ações do usuário.

    2. Selecione Proteção contra enumeração de e-mails (recomendado).

  2. Clique em Salvar.

Node.js

  1. Instale o SDK Admin.

  2. Para ativar a proteção contra enumeração de e-mails, use uma destas opções:

    • Para proteção no nível do projeto:

      import { getAuth } from 'firebase-admin/auth';
      
      getAuth().projectConfigManager().updateProjectConfig(
        {
          emailPrivacyConfig: {
            enableImprovedEmailPrivacy: true,
          },
        }
      );
      
    • Para proteção no nível do locatário:

      import { getAuth } from 'firebase-admin/auth';
      
      getAuth().tenantConfigManager().updateTenant(TENANT_ID,
        {
          emailPrivacyConfig: {
            enableImprovedEmailPrivacy: true,
          },
        }
      );
      

      Substitua TENANT_ID pelo ID do locatário para o qual você quer ativar a proteção contra enumeração de e-mails.

REST

  1. No console do Google Cloud, imprima um token de acesso para o ID do projeto usando o comando gcloud auth print-access-token:

    gcloud auth print-access-token --project=PROJECT_ID
    
  2. Ative a proteção contra enumeração de e-mails para o ID do projeto usando a 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"
    

Substitua:

  • ACCESS_TOKEN: o token de acesso que você gerou anteriormente.
  • PROJECT_ID: ID do projeto

Desativar a proteção contra enumeração de e-mails

Para desativar a proteção contra enumeração de e-mails, siga estas etapas:

Console do Firebase

  1. No console do Firebase, acesse a página Configurações do Firebase Auth.

    Acessar as configurações do Firebase Auth

    1. No painel de navegação, selecione Ações do usuário.

    2. Desmarque Proteção contra enumeração de e-mails (recomendado).

  2. Clique em Salvar.

Node.js

  1. Instale o SDK Admin.

  2. Para desativar a proteção contra enumeração de e-mails, use uma das seguintes opções:

    • Para proteção no nível do projeto:

      import { getAuth } from 'firebase-admin/auth';
      
      getAuth().projectConfigManager().updateProjectConfig(
        {
          emailPrivacyConfig: {
            enableImprovedEmailPrivacy: false,
          },
        }
      );
      
    • Para proteção no nível do locatário:

      import { getAuth } from 'firebase-admin/auth';
      
      getAuth().tenantConfigManager().updateTenant(TENANT_ID,
        {
          emailPrivacyConfig: {
            enableImprovedEmailPrivacy: false,
          },
        }
      );
      

      Substitua TENANT_ID pelo ID do locatário para o qual você quer desativar a proteção contra enumeração de e-mails.

REST

  1. No console do Google Cloud, imprima um token de acesso para o ID do projeto usando o comando gcloud auth print-access-token:

    gcloud auth print-access-token --project=PROJECT_ID
    
  2. Desative a proteção contra enumeração de e-mails usando a 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"
    

Substitua:

  • ACCESS_TOKEN: o token de acesso que você gerou anteriormente.
  • PROJECT_ID: ID do projeto

Exemplo de uma resposta de erro

Se um usuário tentar fazer login com um endereço de e-mail ou senha incorreta ou se inscrever com um endereço de e-mail que já existe no sistema, o Identity Platform vai retornar um erro semelhante ao seguinte:

{
"code": "auth/internal-error",
"message": "{\"error\":{\"code\":400,\"message\":\"INVALID_LOGIN_CREDENTIALS\",\"errors\":[{\"message\":\"INVALID_LOGIN_CREDENTIALS\",\"domain\":\"global\",\"reason\":\"invalid\"}]}}"
}