Verifique e-mails violados na inscrição sem executar o HaveIBeenPwned você mesmo
Capture credenciais comprometidas antes de armazená-las. Uma única chamada de API, um manipulador de rota Next.js e um validador React Hook Form que adiciona 40 ms à latência de inscrição.
Um usuário que retorna digita sua senha favorita em seu formulário de inscrição. Essa senha vazou no despejo da AT&T de 2024, na violação 23andMe de 2023 e na extração do cofre do LastPass em 2022. Você armazena o hash, parabeniza-se pelo bcrypt e, três semanas depois, um bot de preenchimento de credenciais entra na conta vindo de um proxy residencial no Brasil.
A solução é barata. Uma chamada de API na inscrição informa se o e-mail aparece em corpora de violação conhecida. Use esse sinal para forçar a MFA, exigir uma senha mais forte ou colocar a inscrição em uma fila de revisão. Esta postagem mostra o endpoint, um manipulador de rota Next.js e um validador React Hook Form que adiciona cerca de 40 ms à latência de sua inscrição.
Por que verificar a violação na inscrição e não depois
O preenchimento de credenciais funciona porque 65% dos usuários reutilizam senhas em sites (Google/Harris 2019, replicado na pesquisa Bitwarden de 2023). Um e-mail vinculado a 14 violações anteriores não é uma amostra aleatória da Internet; é um usuário que entregou a mesma senha a 14 fornecedores diferentes que vazaram. A probabilidade marginal de que eles tenham digitado o mesmo em seu formulário é alta.
A verificação na inscrição custa uma viagem de ida e volta. A verificação após uma aquisição custa um tíquete de suporte, um reembolso, uma análise de confiança e segurança e, muitas vezes, uma notificação de violação do GDPR. Você deseja o sinal antes que a senha chegue à sua tabela de usuários, não depois.
Uma chamada de API, dois sinais
POST /v1/breach/check aceita um e-mail ou uma senha. Aqui está a chamada por e-mail.
E um exemplo de resposta para um endereço que aparece em três corpora.
Duas coisas que vale a pena destacar. breach_count e o breaches array fornece nomes de conjuntos de dados, datas e contagens totais de registros; eles não retornam a senha exposta, o registro completo vazado ou qualquer PII além do que você enviou. password_exposed só é preenchido quando você passa por um password campo no corpo da solicitação. Para a inscrição, apenas o e-mail é suficiente para avaliar o risco.
A API k-anonimato do HaveIBeenPwned é gratuita para uso pessoal e excelente para pesquisas de prefixo de senha. Em escala de produção, você paga US$ 3,50/mês por chave e mantém o tratamento de prefixo SHA-1, além de limites de taxa do lado do cliente. O endpoint botoi envolve esse encanamento e adiciona cache de borda, autenticação unificada com o restante da API e uma única conta.
Manipulador de rota Next.js
Coloque a chamada atrás de sua própria rota para que a chave da API permaneça no servidor. Valide a entrada com Zod, adicione um tempo limite de AbortController de 300 ms e falhe na abertura em erros de upstream para que uma verificação de violação lenta nunca bloqueie uma inscrição real.
Algumas opções de design que valem a pena citar. O tempo limite é curto (300ms) porque a resposta do P95 é de 120ms e qualquer coisa mais lenta é transitória; a ramificação com falha aberta retorna risk: 'low' portanto, um terceiro esquisito não pode retirar seu formulário de inscrição. O tier() A função é o único lugar onde reside a política de risco, o que torna difícil reajustá-la mais tarde.
Validador de formulário React Hook do lado do cliente
Debounce em 500 ms para não disparar uma solicitação a cada pressionamento de tecla. Não bloqueie o botão enviar no resultado; mostre um aviso e pré-alterne o MFA. Os avisos são convertidos; blocos rígidos fazem com que você perca o usuário.
Conecte o gancho em um componente React Hook Form. O watch call alimenta o e-mail no gancho e o resultado verifica previamente a caixa MFA em busca de endereços violados.
O que fazer com o resultado
Traduza a contagem de violações em uma política. Comece com esta tabela e ajuste assim que tiver duas semanas de inscrições atrás da pontuação.
| Contagem de violações | Ação | Experiência do usuário | Por que |
|---|---|---|---|
| 0 | Prosseguir | Sem alteração | Nenhuma evidência pública de compromisso prévio; caminho padrão. |
| 1-3 | Solicitar MFA | Marque previamente a caixa MFA, mostre um aviso suave | É comum uma senha reutilizada por violação; cutucar o usuário para proteger a nova conta. |
| 4-10 | Forçar MFA + senha forte | Exigir inscrição no TOTP antes do primeiro login, mínimo de 14 caracteres | A exposição repetida sugere que o e-mail está em todas as principais listas de credenciais; uma senha fraca aqui é uma aquisição esperando para acontecer. |
| 10+ | Bloco macio com fricção | Adicione um captcha ou envie para revisão manual | Este e-mail é efetivamente público. Aumente o custo do invasor antes de criar uma conta nele. |
Empilhe-o com mais duas verificações por menos de 120 ms
Somente a verificação de violação detecta o risco de senha reutilizada. Combine com /v1/disposable-email/check para sinalizar domínios de email temporário e /v1/vpn-detect para sinalizar IPs de datacenter ou de origem Tor, e você tem um scorecard de três sinais que funciona em paralelo abaixo de 120 ms no P95. O padrão de pontuação completo (pesos, limites, registro de auditoria) reside em Evite fraudes de inscrição com 3 verificações de API.
Obtenha uma chave de API gratuita em botoi.com/api/signup. O nível gratuito cobre 1.000 verificações de violação por dia (5 req/min burst), o suficiente para um pequeno SaaS ou para reproduzir seus últimos 30 dias de inscrições por meio do endpoint e calibrar os níveis acima contra dados de rotatividade e abuso.
Referência completa do endpoint: API de verificação de violação.
FAQ
- Isso vaza endereços de e-mail para o botoi?
- O e-mail chega à API por TLS e é usado apenas para calcular a correspondência de violação. Os corpos de solicitação não persistem nos logs de acesso; apenas método, caminho, status e latência são retidos por 30 dias. Consulte a documentação da API para obter a instrução completa de manipulação de dados.
- Qual é a latência típica?
- O tempo médio de resposta é de 40 ms em um nó de borda Cloudflare Workers, 120 ms no percentil 95. O manipulador nesta postagem define um tempo limite de AbortController de 300 ms para que uma chamada lenta não possa bloquear seu formulário de inscrição.
- Quão atualizado é o conjunto de dados de violação?
- O conjunto de dados é sincronizado semanalmente a partir de dumps públicos (violações rastreadas por HIBP, listas de preenchimento de credenciais e coleções nº 1 a nº 5). Novos corpora aparecem em até 7 dias após a divulgação pública.
- Posso verificar as senhas diretamente?
- Sim. POST um prefixo SHA-1 (primeiros 5 caracteres hexadecimais) ou a senha em texto simples para o mesmo endpoint. O formato de prefixo é mais seguro para chamadores do lado do cliente porque o hash completo nunca sai do navegador. Use texto simples apenas do seu servidor.
- Isso é compatível com o GDPR?
- A verificação de violações é uma medida de segurança nos termos do Artigo 32 do GDPR (segurança do processamento). Documente a verificação em seus Registros de Atividades de Processamento, liste a Botoi como processadora em seu DPA e anote a base legal (interesse legítimo em impedir a tomada de conta).
Comece a construir com botoi
150+ endpoints de API para consultas, processamento de texto, geração de imagens e utilitários para desenvolvedores. Plano gratuito, sem cartão de crédito.