O guia completo para números virtuais para quem projeta sistemas de autenticação
Se você já precisou integrar a verificação por SMS em um aplicativo, você saberá que o código de verificação em si é a parte menos frustrante.
A parte mais frustrante é o teste.
Você precisa de um número real para receber um SMS. Usar seu número pessoal cria um histórico de verificação irrecuperável, e você eventualmente acabará em um ciclo estranho de contas de teste usando seu número. Usar o número de um colega de trabalho é inconveniente e insustentável. Criar uma conta de telefone descartável para cada ambiente é desnecessário, mas razoável.
É aí que os números virtuais são úteis — não apenas como uma solução de privacidade para os usuários finais, mas como uma ferramenta importante para desenvolvedores que criam sistemas com verificação por SMS.
O Problema Real: Números Virtuais para Desenvolvedores
Os casos de uso precisam ser separados, pois são muito diferentes.
Caso 1: Testar fluxos de verificação por SMS em seu aplicativo
Digamos que seu sistema de verificação por telefone para integração de usuários precise testar o seguinte:
Os códigos chegam antes de expirar?
A interface lida com um código expirado?
O sistema impõe limites de reenvio?
E se o usuário verificar com um número diferente?
Para esses cenários, você precisa de SMS reais recebidos em um número de sua propriedade.
Um número virtual resolve perfeitamente essa questão. Para o ambiente de teste, você possui um número real, e quando os códigos são enviados, você pode verificar todo o processo sem precisar divulgar seu número privado.
Caso 2: Criação de contas em serviços externos durante o desenvolvimento
Você pode estar trabalhando em uma integração com uma API que exige uma conta verificada. Pode também estar realizando uma raspagem web de dados comumente disponíveis e precisa de várias contas. Ou talvez esteja testando seu aplicativo para ver como ele funciona com uma determinada plataforma, entre outras coisas.
Números pessoais devem ser usados com cautela, pois criam uma relação permanente entre sua identidade pessoal e uma conta de desenvolvedor que você planeja excluir em breve.
Caso 3: Proteção da privacidade de membros da equipe durante registros corporativos
Com que frequência você ou um membro da equipe usaram seu número pessoal para criar uma conta em uma nova ferramenta que a empresa quer testar? Esse número vai fazer parte de um registro permanente, mesmo que a empresa decida parar de usar a ferramenta.
Como a Verificação por SMS Realmente Funciona
Antes de discutir o papel dos números virtuais, é importante esclarecer o processo de verificação.
Usuário fornece número → Backend valida formato (E.164) → Chama API do provedor de SMS → Provedor roteia para operadora → Operadora entrega SMS → Usuário insere código → Backend valida hash/token → Verificação concluída
Cada etapa tem potencial para falha.
Validação de Formato. Números em diferentes formatos devem ser normalizados para o padrão E.164 antes de qualquer outro processamento. A biblioteca libphonenumber do Google é o padrão de facto para processamento de números de telefone e está disponível para a maioria das linguagens de programação.
Por exemplo, com libphonenumber-js
import { parsePhoneNumber } from 'libphonenumber-js';
const phone = parsePhoneNumber('+5511999998888');
console.log(phone.isValid());
console.log(phone.number);
TTL do Código. Após qual período o código deve ser considerado inválido? 5 minutos é a resposta mais comum, mas isso deve ser validado com testes de SMS para garantir que o código seja entregue dentro do intervalo de tempo.
Limite de Requisições. Quantas vezes um código pode ser enviado em um período de tempo? por número? por IP? por sessão? Basicamente, tentativas devem ser validadas com números reais para garantir que o sistema esteja protegido contra uso excessivo.
Idempotência. O que deve acontecer se o mesmo código for enviado mais de uma vez? Ou um código de uma sessão anterior estiver sendo validado? O código deve ser considerado inválido após uma submissão bem-sucedida.
Testes no mundo real são necessários para a maioria deles para entender os limites do sistema.
Números Virtuais na Prática: O que Funciona e o que Não Funciona
O que funciona bem:
Números virtuais de qualidade tendem a se integrar bem com a maioria dos fluxos de verificação para serviços online. O SMS chega, os códigos são válidos, a verificação é bem-sucedida. Isso é conveniente para cadastros não essenciais, e especialmente útil para desenvolvimento e testes, já que os usuários podem evitar divulgar seu número pessoal.
Para o desenvolvimento, o benefício é claro: você controla o número e mantém o SMS chegando no ambiente de teste.
O que pode não funcionar:
Algumas plataformas empregam mecanismos avançados de detecção anti-fraude, mantêm suas próprias listas negras de números virtuais conhecidos e os rejeitam ativamente. Isso é mais comum em:
Plataformas financeiras reguladas
Redes sociais com verificações extensas de identidade
Serviços governamentais
Aplicativos que exigem que os números estejam vinculados a uma operadora específica para conformidade
Nesses casos, será necessário um número real. Estes também são casos em que você não deve usar números virtuais—quer seja para testes ou uso real.
A qualidade do provedor importa bastante:
Ter um número virtual não é suficiente; ele precisa ter um histórico limpo e ser entregue por uma infraestrutura confiável. Se um número já é usado por centenas ou milhares de usuários para spam ou criação em massa de contas, será colocados na lista negra. Um número recém-adquirido de um bom provedor se comportará como um número real.
Lista Técnica de Integração de Verificação por SMS
Se a verificação por SMS é o que você está adicionando ao seu aplicativo, aqui está o que é necessário:
Backend:
# Pseudocódigo — adapte ao seu stack
def enviar_sms_verificacao(telefone: str) -> dict:
# 1. Normalizar para E.164
normalizado = normalize_to_e164(telefone)
se não is_valid(normalizado):
raise ValueError("Número de telefone inválido")
# 2. Limite de taxa antes de qualquer coisa
se rate_limit_excedido(normalizado, ip=request.ip):
raise RateLimitError("Muitas tentativas. Por favor, aguarde.")
# 3. Gerar código seguro (não use random.randint)
código = secrets.randbelow(900000) + 100000 # 6 dígitos
# 4. Armazenar hash, não o código em texto plano
hash_código = hashlib.sha256(f"{código}{sal}".encode()).hexdigest()
Nota: O pseudocódigo acima mostra práticas comuns; implementações exatas dependerão do contexto.
store_code(normalizado, hash_código, ttl=300) # 5 minutos
5. Enviar via provedor
sms_provider.send(to=normalizado, body=f"Seu código: {código}")
retornar {"status": "enviado", "expires_in": 300}
Pontos críticos que muitas pessoas esquecem:
Nunca armazene o código em texto plano, apenas o hash. Se o banco de dados vazar, os códigos não estarão ativos.
Após um código ser utilizado com sucesso, inválidelo; também faça isso após o tempo expirar. Um código deve ser usado apenas uma vez.
As tentativas de validação também devem ter limites. Tentativas de adivinhar o código também devem ser limitadas.
Cada tentativa falhada deve ser registrada. Isso é importante para detectar abusos e para depuração em produção.
Backend:
// Reenvio automático quando o timer termina
const timer = 60
const reenviarAutomatico = (valor) => {
if (valor.length === 6) {
setCodigo(valor);
setTimeout(() => {
podeReenviar = true
enviarCodigo(valor)
}, timer * 1000);
}
}
Escolhendo um Provedor de Número Virtual para Desenvolvimento
Os critérios que você analisará para uma aplicação técnica diferem daqueles de um uso pessoal.
Entrega de mensagens sem bloqueios indesejados. No momento de testar o código, as notificações devem chegar sem atrasos. Se o número virtual for bloqueado pela aplicação testada, os resultados ficarão não confiáveis.
Sem restrições. Se você está testando uma integração de código e a aplicação tiver um número virtual, realize um teste e verifique problemas antes de confiar nele.
Acesso programático (se existir). No mercado, existem provedores de números virtuais com capacidade de receber SMS via API, permitindo integrar esse serviço na sua estrutura de testes em vez de tarefas manuais.
Preços de desenvolvimento. Você está licenciado o número virtual pelo período de integração. Espera-se uma cobrança por uso, não assinatura.
NumeroVirtual é uma boa opção a considerar para esse caso, números virtuais para SMS durante o desenvolvimento. Você pode usar esses números para manter seu número privado afastado de registros arriscados. NumeroVirtual foca em verificação por SMS e tem alta confiabilidade na entrega. Por ter essa especialização, evita a complexidade de soluções empresariais para comunicações corporativas, que são maiores do que o necessário aqui.
O lado da privacidade que os desenvolvedores frequentemente negligenciam
Vai além de considerações técnicas, mas vale mencionar.
Ao solicitar que clientes forneçam seus números de telefone para verificação, você está pedindo um elemento ligado à conta bancária, às contas mais importantes, e até ao WhatsApp deles. É uma grande responsabilidade.
Considere estas perguntas antes de implementar:
É realmente necessário ter o número de telefone? Em alguns casos, ter um email e senha é suficiente. Muitas vezes, links mágicos via email são mais seguros do que uma mensagem SMS. Em alguns casos, a verificação por telefone pode acrescentar fricção ao processo. Justifique o uso do número.
Por quanto tempo planeja manter esse número? Se o único propósito da verificação for durante o onboarding, é necessário armazenar o número por tempo prolongado? Em muitos casos, pode-se remover o número do sistema após a verificação.
O que fazer quando o usuário solicitar a exclusão do número de telefone? (LGPD) Se um usuário pedir que seus dados sejam apagados, você consegue remover o número e comunicar que a solicitação foi atendida?
É melhor refletir sobre essas questões na fase de projeto antes de fazer uma grande reformulação após ter milhares ou milhões de registros.
TL;DR
Durante o desenvolvimento, números virtuais são uma boa opção para testes de fluxo SMS.
Normalização? Use
libphonenumber. Armazene em formato E.164.Armazene o valor criptografado do código, não o valor bruto.
Implemente limites de taxa adequados para reenvio e validação.
Bons números virtuais têm histórico limpo, o que ajuda na aceitação.
Nem todas as plataformas aceitam números virtuais, então execute seus testes.
Pergunte-se se um email seria suficiente ao invés de um número de telefone.
Você tem um exemplo real de implementação de verificação por SMS ou um caso extremo que seria útil para esse tópico? Deixe nos comentários!
Top comments (0)