Habilitar o inhabilitar la protección de enumeración de correos
En esta guía se explica la función de protección contra la enumeración de correos electrónicos y se muestra cómo habilitarla e inhabilitarla. Si creaste tu proyecto el 15 de septiembre del 2023 o después, la protección contra la enumeración de correos está habilitada de forma predeterminada.
Información general
La enumeración de correos electrónicos es un tipo de ataque de fuerza bruta en el que un agente malicioso intenta adivinar o confirmar usuarios en un sistema enviando una dirección de correo a la API y comprobando la respuesta.
Si no se protege la enumeración de correos, Identity Platform devuelve información que se puede usar en un ataque de enumeración de correos:
Se intenta iniciar sesión con una dirección de correo que no existe en el sistema. Identity Platform devuelve un error
EMAIL_NOT_FOUND
.Se intenta registrarse con una dirección de correo que ya existe en el sistema. Identity Platform devuelve un error
EMAIL_EXISTS
.
Puedes usar la función de protección contra la enumeración de correos de Identity Platform para proteger las cuentas de usuario de tu aplicación frente a estos ataques.
Cuando la protección de enumeración de correos electrónicos está habilitada, tu proyecto se comporta de la siguiente manera:
La API
fetchSignInForEmail
fallará. Tampoco se podrá vincular a usuarios autenticados anónimos con una dirección de correo antes de la versión 22.3.0 del SDK para Android, la 10.18.0 para iOS y la 10.6.0 para Web.Ya no se devuelve una lista de métodos de inicio de sesión para una dirección de correo especificada al llamar a la API REST
createAuthUri
o al método del SDK de clientefetchSignInMethodsForEmail
en todas las plataformas.Los usuarios no pueden cambiar su dirección de correo sin verificar primero la nueva dirección. Por ejemplo, ya no puedes cambiar la dirección de correo de un usuario con la API REST de
update
, la API REST desetAccountInfo
ni el método del SDK de cliente deupdateEmail
en ninguna plataforma.Puedes usar
verifyBeforeUpdateEmail
para Web y Android, osendEmailVerification(beforeUpdatingEmail:)
para iOS.Ya no puedes usar la API REST
setAccountInfo
para vincular un proveedor de correo o contraseña a una cuenta de usuario. Ya no puedes usar el método del SDK de clientelinkWithCredential
con unEmailAuthCredential
en ninguna plataforma. En su lugar, usa la API RESTsignUp
y pasa el token de ID del usuario en el campoidToken
y los camposemail
ypassword
para vincularlos.Elimina las respuestas de error de los flujos de verificación de correo electrónico, incluidos los flujos que se iniciaron llamando a la API REST
sendOobCode
con los tipos de solicitudVERIFY_AND_CHANGE_EMAIL
oPASSWORD_RESET
, y llamando averifyBeforeUpdateEmail
para web y Android,sendEmailVerification(beforeUpdatingEmail:)
para iOS osendPasswordResetEmail
en todas las plataformas.Cuando solicitas restablecer una contraseña, se envía un correo de verificación solo si la dirección de correo existe. Cuando solicitas cambiar una dirección de correo, se envía un correo de verificación solo si la dirección de correo no existe. En ambos casos, no hay mensajes de error específicos que indiquen cuándo no se envían los correos.
Te recomendamos que no permitas que los usuarios se registren sin un flujo de verificación de correo electrónico.
Los casos de inicio de sesión no válidos devuelven una respuesta de error
INVALID_LOGIN_CREDENTIALS
. Los casos de registro no válidos siguen devolviendo erroresEMAIL_EXISTS
. Consulta las recomendaciones de la siguiente sección.
Si tu aplicación depende de alguno de los comportamientos que se han modificado con la protección de enumeración de correos electrónicos, puedes inhabilitarla. Sin embargo, no se recomienda a largo plazo. Consulta la siguiente sección.
Recomendaciones de seguridad
Uno de los métodos más habituales para llevar a cabo un ataque de apropiación de cuenta es realizar ataques de relleno de credenciales con credenciales filtradas o fáciles de adivinar. La enumeración de correos también se puede usar para obtener información sensible sobre tus usuarios o para llevar a cabo ataques de phishing contra ellos. Por estos motivos, Google recomienda usar la función de protección contra la enumeración de correos electrónicos para proteger tus aplicaciones frente a este tipo de ataques.
Si creaste tu proyecto el 15 de septiembre del 2023 o después, la protección contra la enumeración de correos está habilitada de forma predeterminada. Te recomendamos que dejes habilitada la protección de enumeración de correo electrónico y que no te bases en ninguno de los comportamientos que se han indicado anteriormente en esta guía.
Si creaste tu proyecto antes del 15 de septiembre del 2023, la protección contra la enumeración de correos electrónicos no se habilitará automáticamente.
Si tus aplicaciones no dependen de ninguno de los comportamientos descritos anteriormente en esta guía, te recomendamos que habilites la protección contra la enumeración de correos inmediatamente.
Si tus aplicaciones dependen de alguno de los comportamientos descritos anteriormente, te recomendamos que empieces a dejar de hacerlo y que habilites la protección de enumeración de correos lo antes posible.
Además de usar la protección contra la enumeración de correos electrónicos, te recomendamos que tomes medidas para evitar que se abuse de los endpoints de registro de tu proyecto que sigan devolviendo errores EMAIL_EXISTS
. Estas son algunas formas de hacerlo:
- Habilita Comprobación de aplicaciones.
- Integra reCAPTCHA en tu flujo de registro.
- No permitas que se inicie sesión con direcciones de correo electrónico y contraseñas o enlaces enviados por correo electrónico, y usa métodos alternativos, como la función Iniciar sesión con Google.
Habilitar la protección de enumeración de correo electrónico
Para habilitar la protección de enumeración de correos, sigue estos pasos:
Consola de Firebase
En la consola de Firebase, ve a la página Authentication Settings (Configuración de autenticación).
Ir a Configuración de autenticación
En el panel Gestión de cuentas de usuario, selecciona Acciones de usuario.
Selecciona Protección de enumeración de correo electrónico (recomendado).
Haz clic en Guardar.
Node.js
Instala el SDK Admin.
Para habilitar la protección de enumeración de correos, usa una de las siguientes opciones:
Para proteger un proyecto:
import { getAuth } from 'firebase-admin/auth'; getAuth().projectConfigManager().updateProjectConfig( { emailPrivacyConfig: { enableImprovedEmailPrivacy: true, }, } );
Para obtener protección a nivel de inquilino:
import { getAuth } from 'firebase-admin/auth'; getAuth().tenantConfigManager().updateTenant(TENANT_ID, { emailPrivacyConfig: { enableImprovedEmailPrivacy: true, }, } );
Sustituye
TENANT_ID
por el ID de inquilino para el que quieras habilitar la protección contra la enumeración de correos.
REST
En la consola Google Cloud , imprime un token de acceso para el ID de tu proyecto con el comando
gcloud auth print-access-token
:gcloud auth print-access-token --project=PROJECT_ID
Habilita la protección contra la enumeración de correos en tu ID de proyecto mediante la 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"
Haz los cambios siguientes:
- ACCESS_TOKEN: el token de acceso que has generado anteriormente
- PROJECT_ID: tu ID de proyecto
Inhabilitar la protección de enumeración de correos electrónicos
Para inhabilitar la protección de enumeración de correos, sigue estos pasos:
Consola de Firebase
En la consola de Firebase, ve a la página Authentication Settings (Configuración de autenticación).
Ir a Configuración de autenticación
En el panel Gestión de cuentas de usuario, selecciona Acciones de usuario.
Desmarca Protección contra enumeración de correo electrónico (recomendado).
Haz clic en Guardar.
Node.js
Instala el SDK Admin.
Para inhabilitar la protección de enumeración de correos, usa una de las siguientes opciones:
Para proteger un proyecto:
import { getAuth } from 'firebase-admin/auth'; getAuth().projectConfigManager().updateProjectConfig( { emailPrivacyConfig: { enableImprovedEmailPrivacy: false, }, } );
Para obtener protección a nivel de inquilino:
import { getAuth } from 'firebase-admin/auth'; getAuth().tenantConfigManager().updateTenant(TENANT_ID, { emailPrivacyConfig: { enableImprovedEmailPrivacy: false, }, } );
Sustituye
TENANT_ID
por el ID del arrendatario para el que quieras inhabilitar la protección contra la enumeración de correos.
REST
En la consola Google Cloud , imprime un token de acceso para tu ID de proyecto con el comando
gcloud auth print-access-token
:gcloud auth print-access-token --project=PROJECT_ID
Inhabilita la protección de enumeración de correos mediante la 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"
Haz los cambios siguientes:
- ACCESS_TOKEN: el token de acceso que has generado anteriormente
- PROJECT_ID: tu ID de proyecto
Ejemplo de respuesta de error
Si un usuario intenta iniciar sesión con una dirección de correo o una contraseña incorrectas, o intenta registrarse con una dirección de correo que ya existe en el sistema, Identity Platform devuelve un error similar al siguiente:
{
"code": "auth/internal-error",
"message": "{\"error\":{\"code\":400,\"message\":\"INVALID_LOGIN_CREDENTIALS\",\"errors\":[{\"message\":\"INVALID_LOGIN_CREDENTIALS\",\"domain\":\"global\",\"reason\":\"invalid\"}]}}"
}