Ativar ou desativar a proteção contra enumeração de e-mails
Neste guia, explicamos o recurso de proteção contra enumeração de e-mails e mostra como ativá-lo e desativá-lo. Se você criou o projeto a partir de 15 de setembro de 2023, a proteção contra enumeração de e-mails será ativada por padrão.
Informações gerais
A enumeração de e-mails é um tipo de ataque de força bruta em que um agente malicioso tenta adivinhar ou confirmar 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 fazer 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 se inscrever com um endereço de e-mail que já existe no sistema. O Identity Platform retorna um erro
EMAIL_EXISTS
.
Use o recurso de proteção contra enumeração de e-mails do Identity Platform para proteger as contas de usuário no seu app contra esses ataques.
Quando a proteção contra enumeração de e-mails está ativada, o projeto tem o seguinte comportamento:
A API
fetchSignInForEmail
vai falhar. A vinculação de usuários autenticados anônimos com um endereço de e-mail também não funciona 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 a API REST
createAuthUri
ou o método do SDK do clientefetchSignInMethodsForEmail
em todas as plataformas.Os usuários não podem alterar o endereço de e-mail sem verificar primeiro o novo endereço. Por exemplo, não é mais possível alterar o endereço de e-mail de um usuário com a API REST
update
, a API RESTsetAccountInfo
ou o método do SDK do clienteupdateEmail
em todas as plataformas.Em vez disso, use
verifyBeforeUpdateEmail
.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 clientelinkWithCredential
com umEmailAuthCredential
em nenhuma plataforma. Em vez disso, use a API RESTsignUp
, transmitindo o token de ID do usuário no campoidToken
e nos camposemail
epassword
para vincular.Remove as respostas de erro dos fluxos de verificação de e-mail, como aquelas iniciadas chamando a API REST
sendOobCode
com tipos de solicitaçãoVERIFY_AND_CHANGE_EMAIL
ouPASSWORD_RESET
e ao chamar os métodos de SDK do clienteverifyBeforeUpdateEmail
ousendPasswordResetEmail
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 já existir. Quando você faz uma solicitação de mudança de e-mail, um e-mail de verificação é enviado apenas se o endereço de e-mail ainda não existir. Em ambos os casos, não há mensagens de erro específicas indicando quando os e-mails não são enviados.
Não recomendamos permitir que os usuários se inscrevam sem um fluxo de verificação de e-mail.
Os casos de login inválidos retornam uma resposta de erro
INVALID_LOGIN_CREDENTIALS
. Os casos de inscrição inválidos continuam retornando errosEMAIL_EXISTS
. Consulte as recomendações na próxima seção.
Se seu app depender de algum dos comportamentos alterados pela proteção de enumeração de e-mails, você poderá desativá-lo atualmente. No entanto, isso não é recomendado a longo prazo. Consulte a seção a seguir.
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 usando credenciais que vazam ou que sejam fáceis de adivinhar. A enumeração de e-mails também pode ser usada para conseguir informações confidenciais sobre os usuários ou realizar ataques de phishing contra eles. Por esses motivos, o Google recomenda o uso do recurso de proteção contra enumeração de e-mails para proteger seus apps contra esses ataques.
Se você criou o projeto a partir de 15 de setembro de 2023, a proteção contra enumeração de e-mails vai ser ativada por padrão. Recomendamos que você deixe a proteção de enumeração de e-mails ativada e evite depender de nenhum dos comportamentos listados anteriormente neste guia.
Se você criou o projeto antes de 15 de setembro de 2023, a proteção contra enumeração de e-mails não será ativada automaticamente.
Caso seus apps não dependam 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ê comece a migrar dessa ação e ative a proteção contra enumeração de e-mails assim que possível.
Além de usar a proteção contra enumeração de e-mails, tome medidas para
evitar o abuso dos endpoints de inscrição do seu projeto que continuam retornando
erros EMAIL_EXISTS
. Veja algumas maneiras de fazer isso:
- Ative o App Check.
- Integre o reCAPTCHA ao seu fluxo de inscrição.
- Não permita 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
No Console do Firebase, acesse a página Configurações do Firebase Authentication.
Acessar as configurações do Firebase Auth
No painel de navegação, selecione Ações do usuário.
Selecione Proteção contra enumeração de e-mails (recomendado).
Clique em Save.
Node.js
Instale o SDK Admin.
Para ativar 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: 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
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
Ative a proteção contra enumeração de e-mails no 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 gerado 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
No Console do Firebase, acesse a página Configurações do Firebase Authentication.
Acessar as configurações do Firebase Auth
No painel de navegação, selecione Ações do usuário.
Desmarque Proteção contra enumeração de e-mails (recomendado).
Clique em Save.
Node.js
Instale o SDK Admin.
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
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
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 gerado anteriormente.
- PROJECT_ID: ID do projeto;
Exemplo de 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 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\"}]}}"
}