Habilita o inhabilita la protección de enumeración de correo electrónico
En esta guía, se explica la función de protección de enumeración de correo electrónico y se muestra cómo para habilitarlo o inhabilitarlo. Si creaste tu proyecto el 15 de septiembre o después, 2023, la protección de enumeración de correo electrónico estará habilitada de forma predeterminada.
Descripció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 pasando una dirección de correo electrónico a la API y verificando la respuesta.
Sin la protección de enumeración de correo electrónico, Identity Platform devuelve información que se puede usar en un ataque de enumeración de correo electrónico:
Se intenta acceder con una dirección de correo electrónico que no existe en el sistema. Identity Platform muestra un error
EMAIL_NOT_FOUND
.Se intenta registrarse con una dirección de correo electrónico que ya existe en el sistema. Identity Platform muestra un error
EMAIL_EXISTS
.
Puedes usar la función de protección contra enumeración de correos electrónicos de Identity Platform para proteger las cuentas de usuario de tu app de estos ataques.
Cuando la protección de enumeración de correo electrónico está habilitada, tu proyecto tiene el siguiente comportamiento:
La API de
fetchSignInForEmail
fallará. La vinculación de usuarios anónimos autenticados con una dirección de correo electrónico tampoco funcionará en versiones anteriores a la 22.3.0 para Android, 10.18.0 para iOS y 10.6.0 para la Web.Ya no se muestra una lista de métodos de acceso para una dirección de correo electrónico especificada cuando se llama. el
createAuthUri
La API de REST ofetchSignInMethodsForEmail
en todas las plataformas.Los usuarios no pueden cambiar su dirección de correo electrónico sin antes verificando la nueva dirección. Por ejemplo, ya no puedes cambiar la dirección de correo electrónico de un usuario con la API de REST de
update
, la API de REST desetAccountInfo
ni el método del SDK de cliente deupdateEmail
en todas las plataformas.Puedes usar
verifyBeforeUpdateEmail
para Android y la Web, osendEmailVerification(beforeUpdatingEmail:)
para iOS. en su lugar.Ya no puedes usar la API de REST de
setAccountInfo
para vincular un correo electrónico o una contraseña proveedor de servicios en una cuenta de usuario existente. Ya no puedes usar el método del SDK de clientelinkWithCredential
con unEmailAuthCredential
en ninguna plataforma. En su lugar, usa la API de RESTsignUp
y pasa el token de ID del usuario en el campoidToken
y los camposemail
,password
para vincular.Elimina las respuestas de error de los flujos de verificación de correo electrónico, como los iniciados llamando a
sendOobCode
API de REST con los tipos de solicitudVERIFY_AND_CHANGE_EMAIL
oPASSWORD_RESET
y cuando llamesverifyBeforeUpdateEmail
para la Web y Android,sendEmailVerification(beforeUpdatingEmail:)
para iOS, osendPasswordResetEmail
en todas las plataformas.Cuando haces una solicitud de restablecimiento de contraseña, se envía un correo electrónico de verificación solo si la dirección de correo electrónico existe. Cuando haces una solicitud de cambio de dirección de correo electrónico, se envía un correo electrónico de verificación solo si la dirección de correo electrónico aún no existe. En ambos casos, no hay mensajes de error específicos que indiquen cuándo no se envían los correos electrónicos.
Te recomendamos que no permitas que los usuarios se registren sin un correo electrónico de verificación de identidad.
Los casos de acceso no válidos muestran una respuesta de error
INVALID_LOGIN_CREDENTIALS
. Los casos de registro no válidos siguen mostrando erroresEMAIL_EXISTS
; consulta este recomendaciones en la siguiente sección.
Si tu app depende de alguno de los comportamientos modificados por la enumeración de correos electrónicos actualmente 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 comunes para realizar un ataque de apropiación de cuentas es realizar ataques de exceso de credenciales con credenciales filtradas o fáciles de suposición. La enumeración de correo electrónico también se puede usar para obtener información sensible sobre tu o ataques de phishing contra ellos. Por estos motivos, Google recomienda usar la función de protección de enumeración de correo electrónico para proteger tus apps contra estos ataques.
Si creaste tu proyecto a partir del 15 de septiembre de 2023, enumeración de correo electrónico está habilitada de forma predeterminada. Te recomendamos que dejes el correo electrónico protección de enumeración habilitada y no depender de ninguno de los comportamientos enumerados anteriormente en esta guía.
Si creaste tu proyecto antes del 15 de septiembre de 2023, enumeración de correo electrónico la protección no se habilita automáticamente.
Si tus apps no dependen de ninguno de los comportamientos descritos anteriormente en esta guía, te recomendamos que habilites la protección de enumeración de correo electrónico de inmediato.
Si tus apps dependen de alguno de los comportamientos descritos anteriormente, te recomendamos lo siguiente: comienzas a migrar y habilitas la enumeración de correos electrónicos protección lo antes posible.
Además de usar la protección de enumeración de correo electrónico, considera tomar medidas para
evitar el abuso de los extremos de registro de tu proyecto que siguen regresando
EMAIL_EXISTS
de errores. A continuación, te indicamos algunas formas de hacerlo:
- Habilita la Verificación de aplicaciones.
- Integra reCAPTCHA en tu registro de tu flujo de trabajo.
- No permitir el acceso con direcciones de correo electrónico y contraseñas o vínculos de correo electrónico, y usar métodos alternativos, como Acceso con Google, en su lugar.
Habilitar la protección de enumeración de correo electrónico
Para habilitar la protección de enumeración de correo electrónico, sigue estos pasos:
Firebase console
En Firebase console, ve a la página Configuración de Firebase Auth.
Ir a la configuración de Firebase Auth
En el panel de navegación, selecciona Acciones del usuario.
Selecciona Protección de enumeración de correo electrónico (recomendada).
Haz clic en Guardar.
Node.js
Instala el SDK de Admin.
Para habilitar la protección de enumeración de correo electrónico, usa una de las siguientes opciones:
Para la protección a nivel de proyecto:
import { getAuth } from 'firebase-admin/auth'; getAuth().projectConfigManager().updateProjectConfig( { emailPrivacyConfig: { enableImprovedEmailPrivacy: true, }, } );
Para obtener protección a nivel de usuario, haz lo siguiente:
import { getAuth } from 'firebase-admin/auth'; getAuth().tenantConfigManager().updateTenant(TENANT_ID, { emailPrivacyConfig: { enableImprovedEmailPrivacy: true, }, } );
Reemplaza
TENANT_ID
por el ID de usuario que para el que quieres habilitar la protección de enumeración de correo electrónico.
REST
En la consola de 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 de enumeración de correo electrónico para tu ID del proyecto con la API de 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"
Reemplaza lo siguiente:
- ACCESS_TOKEN: El token de acceso que generaste antes
- PROJECT_ID: El ID de tu proyecto
Inhabilita la protección de enumeración de correo electrónico
Para inhabilitar la protección de enumeración de correo electrónico, sigue estos pasos:
Firebase console
En Firebase console, ve a la página Configuración de Firebase Auth.
Ir a la configuración de Firebase Auth
En el panel de navegación, selecciona Acciones del usuario.
Borra la Protección de enumeración de correo electrónico (recomendada).
Haz clic en Guardar.
Node.js
Instala el SDK de Admin.
Para inhabilitar la protección de enumeración de correo electrónico, usa una de las siguientes opciones:
Para proteger a nivel del proyecto, haz lo siguiente:
import { getAuth } from 'firebase-admin/auth'; getAuth().projectConfigManager().updateProjectConfig( { emailPrivacyConfig: { enableImprovedEmailPrivacy: false, }, } );
Para obtener protección a nivel de usuario, haz lo siguiente:
import { getAuth } from 'firebase-admin/auth'; getAuth().tenantConfigManager().updateTenant(TENANT_ID, { emailPrivacyConfig: { enableImprovedEmailPrivacy: false, }, } );
Reemplaza
TENANT_ID
por el ID de usuario para el que deseas inhabilitar la protección de enumeración de correo electrónico.
REST
En la consola de Google Cloud, imprime un token de acceso para el ID del 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 correo electrónico con la API de 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"
Reemplaza lo siguiente:
- ACCESS_TOKEN: El token de acceso que generaste antes
- PROJECT_ID: El ID de tu proyecto
Ejemplo de una respuesta de error
Si un usuario intenta acceder con una dirección de correo electrónico o contraseña incorrectas, o intenta registrarse con una dirección de correo electrónico que ya existe en el sistema, Identity Platform mostrará 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\"}]}}"
}