Ir al contenido
Tutorial

Verifique los correos electrónicos violados al registrarse sin ejecutar HaveIBeenPwned usted mismo

| 6 min read

Detecte las credenciales comprometidas antes de almacenarlas. Una única llamada API, un controlador de ruta Next.js y un validador de formulario React Hook que agrega 40 ms a la latencia de registro.

Login form on a screen representing signup flow and breach checks
Photo by Markus Spiske on Unsplash

Un usuario que regresa escribe su contraseña favorita en su formulario de registro. Esa contraseña se filtró en el volcado de AT&T de 2024, la filtración de 23andMe de 2023 y una extracción de la bóveda de LastPass de 2022. Almacena el hash, se felicita por bcrypt y, tres semanas después, un robot que rellena credenciales ingresa a la cuenta desde un proxy residencial en Brasil.

La solución es barata. Una llamada a la API al registrarse le indica si el correo electrónico aparece en corpus de violaciones conocidas. Utilice esa señal para forzar MFA, solicitar una contraseña más segura o colocar el registro en una cola de revisión. Esta publicación muestra el punto final, un controlador de ruta Next.js y un validador de formulario React Hook que agrega aproximadamente 40 ms a la latencia de registro.

¿Por qué realizar una verificación de incumplimiento al registrarse, no más tarde?

El relleno de credenciales funciona porque el 65 % de los usuarios reutilizan contraseñas en todos los sitios (Google/Harris 2019, replicado en la encuesta de Bitwarden de 2023). Un correo electrónico vinculado a 14 infracciones anteriores no es una muestra aleatoria de Internet; es un usuario que ha entregado la misma contraseña a 14 proveedores diferentes con fugas. La probabilidad marginal de que hayan escrito el mismo mensaje en su formulario es alta.

Verificar al registrarse le cuesta un viaje de ida y vuelta. Verificar después de una adquisición le cuesta un ticket de soporte, un reembolso, una revisión de confianza y seguridad y, a menudo, una notificación de incumplimiento del RGPD. Quiere la señal antes de que la contraseña llegue a su tabla de usuario, no después.

Una llamada API, dos señales

POST /v1/breach/check acepta un correo electrónico o una contraseña. Aquí está la llamada por correo electrónico.

Y una respuesta de muestra para una dirección que aparece en tres corpus.

Dos cosas que vale la pena destacar. breach_count y el breaches la matriz le brinda nombres de conjuntos de datos, fechas y recuentos totales de registros; no devuelven la contraseña expuesta, el registro filtrado completo ni ninguna PII más allá de la que usted envió. password_exposed sólo se completa cuando pasas un password campo en el cuerpo de la solicitud. Para registrarse, el correo electrónico por sí solo es suficiente para nivelar el riesgo.

La API k-anonymity de HaveIBeenPwned es gratuita para uso personal y excelente para búsquedas de prefijos de contraseñas. A escala de producción, usted paga $3,50 al mes por clave y mantiene el manejo del prefijo SHA-1 más los límites de tarifas del lado del cliente. El punto final botoi envuelve esa tubería y agrega almacenamiento en caché perimetral, autenticación unificada con el resto de la API y una factura única.

Controladora de ruta next.js

Coloque la llamada detrás de su propia ruta para que la clave API permanezca en el servidor. Valide la entrada con Zod, agregue un tiempo de espera de AbortController de 300 ms y no abra en caso de errores ascendentes para que una verificación lenta de infracciones nunca bloquee un registro real.

Algunas opciones de diseño que vale la pena mencionar. El tiempo de espera es ajustado (300 ms) porque la respuesta del P95 es de 120 ms y cualquier cosa más lenta es transitoria; la rama fallida regresa risk: 'low' para que un tercero poco fiable no pueda eliminar su formulario de registro. El tier() La función es el único lugar donde vive la política de riesgo, lo que hace que sea difícil resintonizarla más adelante.

Validador de formulario React Hook del lado del cliente

Antirrebote en 500 ms para no activar una solicitud con cada pulsación de tecla. No bloquee el botón de enviar en el resultado; muestre una advertencia y pre-alternar MFA en su lugar. Las advertencias se convierten; Los bloques duros te hacen perder el usuario.

Conecte el gancho a un componente de React Hook Form. El watch La llamada introduce el correo electrónico en el gancho y el resultado marca previamente la casilla MFA para detectar direcciones violadas.

¿Qué hacer con el resultado?

Traducir el recuento de infracciones en una política. Comience con esta tabla y ajústela una vez que tenga dos semanas de registros detrás de la puntuación.

recuento de infracciones Acción experiencia de usuario Por qué
0 Proceder Sin cambios No hay evidencia pública de compromiso previo; ruta predeterminada.
1-3 MFA rápido Marque previamente la casilla MFA, muestre una advertencia suave Es común que se reutilice una contraseña por infracción; Empuje al usuario para proteger la nueva cuenta.
4-10 Forzar MFA + contraseña segura Requerir inscripción TOTP antes del primer inicio de sesión, mínimo 14 caracteres La exposición repetida sugiere que el correo electrónico está en todas las listas de credenciales importantes; una contraseña débil aquí es una adquisición a punto de suceder.
10+ Bloque blando con fricción Agregue un captcha o envíelo a revisión manual Este correo electrónico es efectivamente público. Aumente el costo del atacante antes de crear una cuenta en él.

Apílelo con dos comprobaciones más por menos de 120 ms

La verificación de infracciones por sí sola detecta el riesgo de contraseñas reutilizadas. Combínalo con /v1/disposable-email/check para marcar dominios de correo temporal y /v1/vpn-detect para marcar las IP de origen del centro de datos o Tor, y tiene un cuadro de mando de tres señales que se ejecuta en paralelo a menos de 120 ms en el P95. El patrón de puntuación completo (ponderaciones, umbrales, registro de auditoría) se encuentra en Detenga el fraude de registro con 3 comprobaciones de API.

Obtenga una clave API gratuita en botoi.com/api/signup. El nivel gratuito cubre 1000 comprobaciones de infracciones por día (ráfaga de 5 solicitudes/min), suficiente para un SaaS pequeño o para reproducir sus últimos 30 días de registros a través del punto final y calibrar los niveles anteriores contra datos de abandono y abuso.

Referencia completa del punto final: API de verificación de infracciones.

FAQ

¿Esto filtra direcciones de correo electrónico a botoi?
El correo electrónico llega a la API a través de TLS y se utiliza únicamente para calcular la coincidencia de infracción. Los cuerpos de solicitud no persisten en los registros de acceso; sólo el método, la ruta, el estado y la latencia se conservan durante 30 días. Consulte los documentos de la API para conocer la declaración completa sobre el manejo de datos.
¿Cuál es la latencia típica?
El tiempo de respuesta medio es de 40 ms desde un nodo perimetral de Cloudflare Workers, 120 ms en el percentil 95. El controlador en esta publicación establece un tiempo de espera de AbortController de 300 ms para que una llamada lenta no pueda bloquear su formulario de registro.
¿Qué tan actualizado está el conjunto de datos sobre violaciones?
El conjunto de datos se sincroniza semanalmente desde volcados públicos (infracciones rastreadas por HIBP, listas de relleno de credenciales y colecciones n.° 1 a n.° 5). Los nuevos corpus aparecen dentro de los 7 días posteriores a la divulgación pública.
¿Puedo comprobar las contraseñas directamente?
Sí. PUBLICAR un prefijo SHA-1 (primeros 5 caracteres hexadecimales) o la contraseña de texto sin formato en el mismo punto final. La forma de prefijo es más segura para quienes llaman desde el lado del cliente porque el hash completo nunca sale del navegador. Utilice texto sin formato únicamente desde su servidor.
¿Cumple esto con el RGPD?
La verificación de infracciones es una medida de seguridad según el artículo 32 del RGPD (seguridad del procesamiento). Documente la verificación en sus Registros de actividades de procesamiento, incluya a botoi como procesador en su DPA y anote la base legal (interés legítimo en evitar la apropiación de cuentas).

Empieza a construir con botoi

150+ endpoints de API para consultas, procesamiento de texto, generacion de imagenes y utilidades para desarrolladores. Plan gratuito, sin tarjeta de credito.