Ative ou desative a proteção de enumeração de emails
Este guia explica a funcionalidade de proteção contra enumeração de emails e mostra como ativá-la e desativá-la. Se criou o seu projeto a 15 de setembro de 2023 ou após essa data, a proteção de enumeração de emails está ativada por predefinição.
Vista geral
A enumeração de emails é um tipo de ataque de força bruta em que um ator malicioso tenta adivinhar ou confirmar utilizadores num sistema transmitindo um endereço de email à API e verificando a resposta.
Sem a proteção de enumeração de emails, a Identity Platform devolve informações que podem ser usadas num ataque de enumeração de emails:
É feita uma tentativa de início de sessão com um endereço de email que não existe no sistema. O Identity Platform devolve um erro
EMAIL_NOT_FOUND
.É feita uma tentativa de inscrição com um endereço de email que já existe no sistema. O Identity Platform devolve um erro
EMAIL_EXISTS
.
Pode usar a funcionalidade de proteção de enumeração de emails da Identity Platform para proteger as contas de utilizadores na sua app contra estes ataques.
Quando a proteção de enumeração de emails está ativada, o seu projeto tem o seguinte comportamento:
A API
fetchSignInForEmail
vai falhar. A associação de utilizadores autenticados anónimos a um endereço de email 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 a Web.Já não é devolvida uma lista de métodos de início de sessão para um endereço de email especificado quando chama a API REST
createAuthUri
ou o método do SDK do clientefetchSignInMethodsForEmail
em todas as plataformas.Os utilizadores não podem alterar o respetivo endereço de email sem primeiro validar o novo endereço. Por exemplo, já não pode alterar o endereço de email de um utilizador com a API REST
update
, a API RESTsetAccountInfo
nem o método do SDK de clienteupdateEmail
em todas as plataformas.Em alternativa, pode usar
verifyBeforeUpdateEmail
para a Web e o Android ousendEmailVerification(beforeUpdatingEmail:)
para iOS.Já não pode usar a API REST
setAccountInfo
para associar um fornecedor de email/palavra-passe a uma conta de utilizador existente. Já não pode usar olinkWithCredential
método do SDK do cliente com umEmailAuthCredential
em nenhuma plataforma. Em alternativa, use a API RESTsignUp
, transmitindo o token de ID do utilizador no campoidToken
e os camposemail
epassword
para fazer a associação.Remove as respostas de erro para fluxos de validação de email, incluindo fluxos iniciados através da chamada da API REST
sendOobCode
com os tipos de pedidosVERIFY_AND_CHANGE_EMAIL
ouPASSWORD_RESET
e através da chamada deverifyBeforeUpdateEmail
para a Web e o Android,sendEmailVerification(beforeUpdatingEmail:)
para o iOS ousendPasswordResetEmail
em todas as plataformas.Quando faz um pedido de reposição de palavra-passe, é enviado um email de validação apenas se o endereço de email existir. Quando faz um pedido de alteração do endereço de email, é enviado um email de validação apenas se o endereço de email ainda não existir. Em ambos os casos, não existem mensagens de erro específicas que indiquem quando os emails não são enviados.
Recomendamos que não permita que os utilizadores se inscrevam sem um fluxo de validação de email.
Os casos de início de sessão inválidos devolvem uma resposta de erro
INVALID_LOGIN_CREDENTIALS
. Os casos de inscrição inválida continuam a devolver errosEMAIL_EXISTS
. Consulte as recomendações na secção seguinte.
Se a sua app depender de algum dos comportamentos alterados pela proteção de enumeração de emails, pode desativá-la. No entanto, isto não é recomendado a longo prazo. Consulte a secção seguinte.
Recomendações de segurança
Um dos métodos mais comuns para realizar um ataque de roubo de conta é realizar ataques de preenchimento de credenciais com credenciais que são roubadas ou fáceis de adivinhar. A enumeração de emails também pode ser usada para obter informações confidenciais sobre os seus utilizadores ou para realizar ataques de phishing contra eles. Por estes motivos, a Google recomenda a utilização da funcionalidade de proteção contra a enumeração de emails para proteger as suas apps contra estes ataques.
Se criou o seu projeto a 15 de setembro de 2023 ou após essa data, a proteção de enumeração de emails está ativada por predefinição. Recomendamos que deixe a proteção de enumeração de email ativada e se abstenha de confiar em qualquer um dos comportamentos indicados anteriormente neste guia.
Se criou o seu projeto antes de 15 de setembro de 2023, a proteção de enumeração de emails não é ativada automaticamente.
Se as suas apps não dependerem de nenhum dos comportamentos descritos anteriormente neste guia, recomendamos que ative imediatamente a proteção da enumeração de emails.
Se as suas apps dependerem de algum dos comportamentos descritos anteriormente, recomendamos que comece a migrar para longe dessa dependência e ative a proteção de enumeração de emails assim que possível.
Além de usar a proteção de enumeração de emails, considere tomar medidas para impedir o abuso dos pontos finais de inscrição do seu projeto que continuam a devolver erros EMAIL_EXISTS
. Seguem-se algumas formas de o fazer:
- Ative o App Check.
- Integre o reCAPTCHA no fluxo de inscrição.
- Não permitir o início de sessão com endereços de email e palavras-passe ou links de email e, em alternativa, usar métodos como o Início de sessão com o Google.
Ative a proteção contra enumeração de emails
Para ativar a proteção contra enumeração de emails, siga estes passos:
consola do Firebase
Na consola do Firebase, aceda à página Definições de autenticação.
Aceda às definições de autenticação
No painel Gestão de contas de utilizador, selecione Ações do utilizador.
Selecione Proteção de enumeração de emails (recomendado).
Clique em Guardar.
Node.js
Instale o SDK de administração.
Para ativar a proteção de enumeração de emails, use uma das seguintes opções:
Para proteção ao nível do projeto:
import { getAuth } from 'firebase-admin/auth'; getAuth().projectConfigManager().updateProjectConfig( { emailPrivacyConfig: { enableImprovedEmailPrivacy: true, }, } );
Para proteção ao nível do inquilino:
import { getAuth } from 'firebase-admin/auth'; getAuth().tenantConfigManager().updateTenant(TENANT_ID, { emailPrivacyConfig: { enableImprovedEmailPrivacy: true, }, } );
Substitua
TENANT_ID
pelo ID do inquilino para o qual quer ativar a proteção de enumeração de emails.
REST
Na Google Cloud consola, imprima um token de acesso para o ID do seu projeto através do comando
gcloud auth print-access-token
:gcloud auth print-access-token --project=PROJECT_ID
Ative a proteção de enumeração de emails para o seu ID do projeto através da 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 o seguinte:
- ACCESS_TOKEN: o token de acesso que gerou anteriormente
- PROJECT_ID: o ID do seu projeto
Desative a proteção de enumeração de emails
Para desativar a proteção de enumeração de emails, siga estes passos:
consola do Firebase
Na consola do Firebase, aceda à página Definições de autenticação.
Aceda às definições de autenticação
No painel Gestão de contas de utilizador, selecione Ações do utilizador.
Desmarque a opção Proteção de enumeração de emails (recomendado).
Clique em Guardar.
Node.js
Instale o SDK de administração.
Para desativar a proteção de enumeração de emails, use uma das seguintes opções:
Para proteção ao nível do projeto:
import { getAuth } from 'firebase-admin/auth'; getAuth().projectConfigManager().updateProjectConfig( { emailPrivacyConfig: { enableImprovedEmailPrivacy: false, }, } );
Para proteção ao nível do inquilino:
import { getAuth } from 'firebase-admin/auth'; getAuth().tenantConfigManager().updateTenant(TENANT_ID, { emailPrivacyConfig: { enableImprovedEmailPrivacy: false, }, } );
Substitua
TENANT_ID
pelo ID do inquilino para o qual quer desativar a proteção de enumeração de emails.
REST
Na Google Cloud consola, imprima um token de acesso para o ID do seu projeto através do comando
gcloud auth print-access-token
:gcloud auth print-access-token --project=PROJECT_ID
Desative a proteção de enumeração de emails através da 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 o seguinte:
- ACCESS_TOKEN: o token de acesso que gerou anteriormente
- PROJECT_ID: o ID do seu projeto
Exemplo de uma resposta de erro
Se um utilizador tentar iniciar sessão com um endereço de email ou uma palavra-passe incorretos, ou tentar inscrever-se com um endereço de email que já existe no sistema, o Identity Platform devolve 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\"}]}}"
}