Anti-abuso e segurança de códigos
Em pré-visualizaçãoO 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. 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.
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.
- 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 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.
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: 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?+
Como impedem ataques de força bruta ao código?+
E quanto ao SMS pumping e tráfego artificialmente inflacionado?+
Estas proteções têm custo adicional?+
De quem os meus utilizadores veem o código?+
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.