Anti-abuso e segurança de códigos
O código é um segredo. Tratamo-lo como tal.
Um código de uso único é tão bom quanto a forma como é gerado, armazenado e limitado por taxa. O Bird Verify gera códigos com uma fonte criptográfica, armazena apenas um hash, compara em tempo constante e limita tanto os envios quanto as tentativas — assim, um log vazado ou um ataque de força bruta não levam o invasor a lugar nenhum. A pontuação de fraude é construída sobre esta base a seguir.
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({
apiKey: process.env.BIRD_API_KEY!,
});
// Send the code, then check it by recipient.
await bird.verify.verifications.create({
to: { phone_number: "+15551234567" },
}).safe();
const { data, error } = await bird.verify.verifications.check({
to: { phone_number: "+15551234567" },
code: userInput,
}).safe();
if (error) throw error;
Sua conta
Confirme que é você.
Digite o código enviado para
+1 ••• ••• 4567Exemplo de código de verificação
A confiança diária de equipas que criam software de classe mundial
Leia mais histórias de clientesSegurança ativa por padrão, não um complemento.
Cada verificação na API do Bird Verify conta com as mesmas proteções: o código é gerado no servidor, nunca é retornado e é armazenado apenas como hash; as verificações são executadas em tempo constante e com um limite de tentativas; e os envios são limitados por destinatário e por workspace. Não é necessário ativar nem configurar nada: é assim que a API funciona, seja para login com dois fatores ou acesso sem senha.
Cinco proteções em cada verificação.
Sem passos de configuração, sem complementos pagos.
- 01
Geração criptográfica.
Os códigos são gerados a partir de uma fonte aleatória criptográfica, uniformemente distribuídos pelo espaço de códigos, sem contadores ou timestamps previsíveis.
- 02
Armazenado como hash, nunca exposto na saída.
Apenas um HMAC-SHA256 de cada código é armazenado; o texto original nunca é devolvido pela API nem escrito no seu stack ou nos nossos logs.
- 03
Comparação em tempo constante.
Os códigos submetidos são comparados em tempo constante, para que um atacante não obtenha informação a partir da duração da verificação.
- 04
Bloqueio por tentativas.
Cada sessão tem um número limitado de verificações (5 por padrão). Quando se esgotam, a sessão falha, impedindo tentativas infinitas.
- 05
Limites de envio.
Um limite de envio por destinatário e um intervalo mínimo entre reenvios controlam os custos e a superfície de abuso, cada um com um 429 e Retry-After.
As tentativas esgotam-se antes dos seus utilizadores.
Um código errado retorna com as tentativas restantes, e a sessão falha quando o limite é atingido — assim, um ataque de força bruta encontra uma barreira muito antes de descobrir o código.
const { data, error } = await bird.verify.verifications.check({
to: { phone_number: "+15551234567" },
code: guess,
}).safe();
if (error) throw error;
// wrong code, attempts left → { success: false, reason: "incorrect_code", attempts_remaining: 2 }
// budget spent, session done → { success: false, reason: "attempts_exhausted", attempts_remaining: null }Em breve: sinais de fraude e proteção contra SMS pumping.
O histórico por envio que o Verify regista hoje é a base para uma camada antifraude que estamos a construir agora. Ela utiliza as mesmas chamadas de criação e verificação, por isso adotá-la depois é uma mudança de configuração, não uma reintegração.
Sinais de risco na criação. Envie contexto de dispositivo, IP e requisição numa verificação, e tentativas de alto risco recebem um resultado de bloqueio antes mesmo de o código ser enviado — assim, não paga para enviar mensagens a um invasor.
Proteção contra SMS pumping e AIT. Limites de envio por país e por prefixo, mais um teto de gastos por workspace, bloqueiam o ataque de tráfego artificialmente inflacionado que direciona OTP para números premium para partilha de receita com operadoras.
Construído sobre o que já existe. A decisão de risco lê o histórico de tentativas que o Verify mantém desde o primeiro dia, e o resultado de bloqueio já faz parte do modelo de status — assim, a camada antifraude é implementada sem reformular a sua integração.
Coloque em prática.
Continue com a documentação, guias e exemplos sobre este tópico. Os recursos estão em inglês.
O resto da plataforma Verify
Uma API, um conjunto de chaves. Explore as outras funcionalidades.
Códigos gerados, armazenados e com limites de taxa como devem ser.
A segurança está integrada no Bird Verify, não é vendida à parte: os canais, o código e os limites são os mesmos dois endpoints.