Anti-abuso e segurança de códigos

Em pré-visualização

O código é um segredo. Tratamo-lo como tal.

Configurar em:
Cursor

Um código de uso único é tão bom quanto a forma como é gerado, armazenado e limitado. O Bird Verify gera códigos com uma fonte criptográfica, armazena apenas um hash, compara em tempo constante e limita tanto os envios como as tentativas — para que um log exposto ou um ataque de força bruta não leve o atacante a lado nenhum. A pontuação de fraude é o próximo passo sobre esta base.

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 } = await bird.verify.verifications.check({
  to:   { phone_number: "+15551234567" },
  code: userInput,
}).safe();

Segurança ativa por padrão, não um complemento.

Cada verificação na API do Bird Verify inclui as mesmas proteções: o código é gerado no servidor, nunca é devolvido e é armazenado apenas como hash; as verificações são feitas em tempo constante e contra um limite de tentativas; e os envios são limitados por destinatário e por workspace. Não precisa de ativar nem configurar nada — é assim que a API funciona, quer a utilize para autenticação de dois fatores ou login sem palavra-passe.

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 e quotas.

    Um limite de envio por destinatário, um intervalo mínimo entre reenvios e uma quota diária por workspace 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 devolve um resultado com as tentativas restantes, e a sessão falha quando o limite é atingido — um ataque de força bruta encontra uma parede em vez de uma porta aberta.

lockout.ts
200
const { data } = await bird.verify.verifications.check({
  to:   { phone_number: "+15551234567" },
  code: guess,
}).safe();

// wrong code, attempts left → { result: "invalid", attempts_remaining: 2 }
// budget spent, session done → { result: "failed", 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 a camada de fraude que estamos a construir. Funciona nas mesmas chamadas de criação e verificação — por isso, adotá-la mais tarde é uma alteração de configuração, não uma reintegração.

Sinais de risco na criação. Passe o contexto de dispositivo, IP e pedido numa verificação, e as tentativas de alto risco recebem um resultado bloqueado antes de o código ser enviado — para que não pague para enviar mensagens a um atacante.

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 bloqueado já faz parte do modelo de estados — por isso, a camada de fraude é implementada sem reformular a sua integração.

FAQ de segurança de verificação

Onde é armazenado o código de uso único?+
Apenas como um hash HMAC-SHA256. O Bird gera o código com uma fonte aleatória criptográfica, envia-o e guarda o hash para comparação — o texto original nunca é devolvido pela API nem escrito em logs.
Como impedem ataques de força bruta ao código?+
Cada sessão tem um número limitado de verificações (5 por padrão), e cada uma é comparada em tempo constante para que a temporização não revele nada. Quando o limite se esgota, a sessão falha, impedindo o atacante de continuar a tentar.
E quanto ao SMS pumping e tráfego artificialmente inflacionado?+
Limites de envio por destinatário e uma quota diária por workspace controlam os custos atualmente. A pontuação de fraude dedicada e a proteção contra SMS pumping estão a caminho, construídas sobre o histórico por envio que o Verify já regista.
Estas proteções têm custo adicional?+
Não. Geração criptográfica, armazenamento com hash, verificações em tempo constante, bloqueio por tentativas e limites de envio são o comportamento padrão de cada verificação — não existe um nível de segurança pago.
De quem os meus utilizadores veem o código?+
Authifly, a marca de verificação da Bird. É a identidade em cada código que os seus utilizadores recebem: o email chega de otp@verify.authifly.com ou do seu próprio domínio verificado, e SMS e WhatsApp têm a marca Authifly. authifly.com é uma página pública que garante aos destinatários que a Authifly envia códigos de uso único legítimos em nome de uma empresa. Bird é a plataforma onde constrói; Authifly é o que o destinatário vê.

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.

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