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.

Cursor
verify.ts
200 · pending
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;
Fluxo de verificação

Sua conta

Confirme que é você.

Digite o código enviado para

+1 ••• ••• 4567

Exemplo de código de verificação

482691
Código verificado
Envie um código. Confirme o destinatário.

A confiança diária de equipas que criam software de classe mundial

Leia mais histórias de clientes

Seguranç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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

lockout.ts
200
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

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.

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.

Seus dados

Todos os campos de contato são obrigatórios.

Para que nossa equipe entre em contato sobre sua demonstração.

Produtos de interesse

Opcional

Entraremos em contato para agendar sua demonstração.
Política de privacidade

Comece com um canal.
Adicione os outros quando estiver pronto.

Uma chave API de teste é sua imediatamente. A produção é desbloqueada quando você adiciona um método de pagamento e verifica um remetente.

Usa Claude Code, Cursor ou Codex? Copie um prompt de configuração e o seu agente instala o Bird CLI e as skills por si. Escolha o seu:

Cursor