>VIBECODEWALL
metodologiaresultadosprointel[login]
|
[escanear]
/blog/artigo
Segurança/2026-08-10/4 min

Evite que um Pagamento Crie Dois Pedidos

Serviços de pagamento e entrega podem repetir o mesmo aviso. Prepare o app para reconhecer a cópia e produzir apenas um resultado seguro.

ler em inglês

antes de começar

Um aviso repetido não deve gerar outra cobrança, outro pedido, outro reembolso, outro e-mail nem uma nova mudança na conta.

Entenda por que o mesmo aviso pode chegar duas vezes

em palavras simples

Um serviço externo pode repetir um aviso quando não sabe se o app recebeu a primeira cópia.

Imagine que uma pessoa pagou uma vez, renovou um plano, fez uma reserva ou pediu um reembolso. A empresa responsável envia um aviso automático ao seu app. Uma falha curta de conexão pode impedir que a empresa receba a confirmação do app. Para não perder uma atualização importante, ela manda o mesmo aviso novamente. Esse é um comportamento de segurança normal em muitos serviços online. A repetição não significa automaticamente que alguém está atacando seu app, mas a nova cópia ainda precisa ser tratada com cuidado.

Desenvolvedores chamam esse aviso automático de webhook. Se o app tratar cada chegada como uma nova ação da pessoa, um pagamento poderá criar dois pedidos, dois créditos, dois envios ou vários e-mails de confirmação. O objetivo simples é permitir que o primeiro aviso válido produza o resultado e reconhecer as cópias seguintes sem repetir esse resultado. O nome técnico da defesa contra a reutilização de um aviso antigo ou copiado é proteção contra replay. Ela protege tanto contra novas tentativas automáticas quanto contra repetições intencionais.

  • ▸Espere cópias depois de respostas lentas, falhas temporárias e novas tentativas automáticas.
  • ▸Relacione cada aviso recebido à ação real que ele pode causar.
  • ▸Não suponha que uma segunda chegada representa uma segunda decisão do cliente.

risco comum

Uma pessoa paga por um produto. A empresa de pagamento não recebe a confirmação rapidamente e repete o aviso. Um app desprotegido cria dois pedidos e solicita dois envios ao estoque.

o que fazer agora

Anote todos os serviços que enviam avisos ao app e quais pedidos, valores, itens de estoque, mensagens, dados de clientes ou acessos cada aviso pode alterar.

peça isto à sua IA

Revise meu app em busca de avisos automáticos enviados por serviços de pagamento, assinatura, reserva, pedido, reembolso e entrega. Desenvolvedores chamam esses avisos de webhooks. Liste onde cada aviso é recebido, quais arquivos cuidam dele, qual mudança real ele pode causar e se uma cópia repetida pode causar essa mudança duas vezes. Não mostre chaves de pagamento, senhas, códigos de acesso nem dados de clientes. Ainda não altere nada; entregue uma revisão por ordem de prioridade.

Dê um número de recibo a cada aviso

em palavras simples

Um número de recibo único permite reconhecer um aviso que o app já atendeu.

Um serviço confiável normalmente inclui um número de recibo único em cada aviso. Antes de alterar um pedido, saldo, assinatura, reserva ou conta, o app deve procurar esse número nos próprios registros. Se ele for novo, o app poderá reservá-lo e continuar. Se o mesmo número do mesmo serviço já estiver guardado, o app deverá enviar uma confirmação normal sem repetir o resultado para o cliente. Guarde também o nome do serviço, pois duas empresas diferentes podem, por coincidência, usar o mesmo número.

Desenvolvedores costumam chamar esse número de recibo de ID do evento. O nome técnico da propriedade que faz várias solicitações iguais deixarem o mesmo resultado final de uma única solicitação é idempotência. Não tente reconhecer cópias apenas pelo nome da pessoa, pelo valor, pelo produto ou pelo horário. Duas compras verdadeiras podem ter esses dados iguais. Use o ID do evento fornecido pelo serviço. Para ações iniciadas pelo próprio app, crie um número único de solicitação e guarde-o com o resultado, permitindo que uma nova tentativa encontre a resposta original com segurança.

  • ▸Guarde o nome do serviço, o ID do evento, o horário, a situação e o resultado final.
  • ▸Exija que a combinação do nome do serviço com o ID do evento seja única.
  • ▸Quando um aviso concluído chegar novamente, devolva o resultado seguro já existente.

risco comum

Duas pessoas compram o mesmo plano pelo mesmo preço quase ao mesmo tempo. Uma regra baseada em valor e horário descarta uma compra verdadeira, enquanto os números de recibo únicos preservam as duas.

o que fazer agora

Encontre o número de recibo único fornecido por cada serviço e confirme que há um local específico e protegido contra duplicação para guardá-lo.

peça isto à sua IA

Adicione tratamento seguro de avisos externos duplicados em todo o meu app. Desenvolvedores chamam isso de idempotência para webhooks. Use o nome do provedor e o ID do evento como uma única chave no banco de dados. Confira e reserve essa chave antes de alterar pedidos, saldos, assinaturas, reservas, estoque, reembolsos, dados de clientes, acesso à conta ou mensagens enviadas. Uma cópia de um aviso já concluído deve receber uma resposta normal de sucesso sem repetir a mudança. Mostre todos os arquivos alterados, a regra do banco e os testes.

Não deixe espaço entre conferir e agir

em palavras simples

Duas cópias que chegam juntas não podem decidir ao mesmo tempo que são a primeira.

Uma consulta seguida por um salvamento separado ainda pode falhar. Duas cópias podem chegar quase juntas. As duas procuram o número de recibo antes que qualquer uma consiga guardá-lo. Assim, ambas acreditam ser a primeira e continuam. Esse problema de tempo talvez não apareça em um teste manual tranquilo. O app precisa de uma única operação protegida no banco que permita a somente uma cópia reservar o número. Apenas a cópia que conquistar essa reserva pode iniciar a mudança no pedido, reembolso, saldo, estoque, mensagem ou conta.

O nome técnico de uma etapa que funciona como uma única unidade protegida é operação atômica. Quando for possível, reserve o número de recibo e faça a alteração relacionada em uma transação do banco de dados. Isso significa que o banco conclui todas as mudanças incluídas em conjunto ou não mantém nenhuma delas. Trabalhos demorados, como pedir que outra empresa envie um produto, precisam de situações claras: recebido, em andamento, concluído, interrompido e precisa de revisão. Uma nova tentativa deve consultar essa situação, e não começar tudo de novo sem pensar. A equipe também precisa de um histórico suficiente para resolver um caso incompleto sem criar outro pagamento ou envio.

  • ▸Permita que apenas uma cópia reserve cada número de recibo.
  • ▸Mantenha a reserva e a mudança importante no banco juntas sempre que possível.
  • ▸Envie trabalhos incertos ou incompletos para revisão, em vez de repeti-los automaticamente.

risco comum

Duas cópias iguais chegam com poucos milésimos de segundo de diferença. Ambas passam por uma consulta separada e concedem um mês de acesso pago. Uma regra de unicidade permite que apenas uma continue.

o que fazer agora

Peça à ferramenta de IA para identificar a etapa exata de reserva e comprovar com um teste que duas cópias simultâneas não conseguem vencer juntas.

peça isto à sua IA

Altere o processamento de avisos automáticos para que a reserva do nome do provedor e do ID do evento seja uma única operação atômica no banco de dados. Somente a solicitação que criar o registro único poderá alterar dinheiro, pedidos, reembolsos, saldos, assinaturas, reservas, estoque, dados de clientes, acesso à conta ou mensagens enviadas. Registre as situações recebido, em andamento, concluído, interrompido e precisa de revisão. Adicione um teste de concorrência que envie dois avisos de teste iguais quase ao mesmo tempo e comprove que apenas um resultado real é criado.

Confirme a origem, teste as cópias e continue acompanhando

em palavras simples

Confirme quem enviou cada aviso, teste repetições com segurança e revise a proteção após mudanças importantes.

Reconhecer o número de recibo é apenas parte do trabalho. Primeiro, o app precisa confirmar que o aviso realmente veio da empresa indicada e que ainda é recente o bastante para ser aceito. Em geral, a empresa inclui uma prova assinada, conferida pelo app com uma chave de pagamento ou um código de acesso guardado em um local que visitantes não conseguem baixar. Desenvolvedores chamam essa prova de assinatura do webhook. Muitos serviços também informam o horário de envio. Siga as instruções do serviço para conferir a assinatura e aceitar somente um intervalo de tempo razoável. Faça essas verificações na mensagem original, exatamente como ela chegou, antes de confiar no conteúdo ou reservar o número de recibo.

Use o modo de teste do serviço, sem dados reais de clientes nem cobranças reais. Envie um aviso válido e confirme um resultado. Envie o mesmo aviso outra vez e depois duas cópias quase juntas. Confirme que ainda existe apenas um pedido, uma mudança de saldo, uma solicitação de envio, uma alteração de acesso e somente as mensagens planejadas. Simule também uma interrupção depois da reserva do número e confirme que o registro mostra o que precisa de revisão. O VibeCodeWall verifica a parte pública do app pelo lado de fora e acompanha mudanças importantes ao longo do tempo. Ele não vê código particular nem substitui esses testes internos, mas uma mudança pública pode indicar que chegou a hora de revisar essa proteção novamente.

  • ▸Confira a prova assinada e a idade permitida antes de confiar no aviso.
  • ▸Teste cópias comuns, cópias simultâneas e uma tentativa interrompida.
  • ▸Repita a revisão sempre que o funcionamento de pagamentos, pedidos, assinaturas ou entregas mudar.

risco comum

A equipe testa somente um aviso de pagamento bem-sucedido. Mais tarde, uma nova tentativa envia outro e-mail de boas-vindas e solicita outro envio porque ninguém testou repetições nem interrupções.

o que fazer agora

Crie testes seguros de repetição para cada aviso que possa afetar dinheiro, dados de clientes, pedidos, estoque, mensagens, reservas ou acesso à conta e repita-os após mudanças relacionadas.

peça isto à sua IA

Crie e execute testes automatizados seguros para todos os avisos automáticos externos do meu app. Desenvolvedores chamam esses avisos de webhooks. Siga o método oficial de cada provedor para verificar a assinatura do webhook com chaves de pagamento ou códigos de acesso de teste, aplique o intervalo de horário documentado pelo provedor e recuse avisos inválidos ou antigos antes de qualquer mudança no banco. Teste o mesmo evento válido duas vezes, dois eventos iguais chegando quase juntos e uma interrupção depois da reserva. Comprove que cada caso cria somente um resultado planejado e deixa uma situação clara. Nunca use cobranças reais, dados reais de clientes, chaves reais de pagamento nem códigos reais de acesso.

Checklist rápido

  1. 01Liste os serviços externos que enviam avisos de pagamento, pedido, assinatura, reserva ou entrega.
  2. 02Identifique o número de recibo único incluído em cada aviso.
  3. 03Confirme que o aviso veio mesmo do serviço informado antes de confiar nele.
  4. 04Recuse avisos mais antigos que o período seguro documentado pelo serviço.
  5. 05Guarde cada número de recibo antes de alterar dinheiro, pedidos, estoque, dados de clientes ou acesso à conta.
  6. 06Faça o registro do número e o início da mudança em uma única operação protegida.
  7. 07Registre se cada aviso foi recebido, concluído, interrompido ou enviado para revisão.
  8. 08Teste um aviso repetido e duas cópias chegando quase juntas.
  9. 09Mantenha chaves de pagamento, senhas e códigos de acesso longe de arquivos que visitantes possam baixar.
  10. 10Revise essa proteção sempre que o funcionamento de pagamentos ou pedidos mudar.

FAQ

Um aviso repetido sempre significa ataque?

Não. Isso costuma acontecer quando o serviço externo não recebe uma confirmação a tempo. A mesma proteção também ajuda quando alguém repete intencionalmente um aviso copiado.

Posso comparar apenas o nome do cliente e o valor pago?

Não. Compras legítimas diferentes podem ter dados iguais. Use o nome do serviço e o número de recibo único fornecido para o aviso.

Por quanto tempo devo guardar os números de recibo?

Guarde-os por tempo suficiente para cobrir o período de novas tentativas documentado pelo serviço, possíveis contestações e suas necessidades de atendimento. Defina e documente o prazo antes de apagar registros.

E se o trabalho parar depois que o número for guardado?

Mantenha uma situação clara, como interrompido ou precisa de revisão. A próxima tentativa deve consultar essa situação e seguir uma regra de recuperação, sem repetir todas as ações.

Isso importa se meu app não recebe pagamentos?

Sim. Avisos repetidos também podem duplicar reservas, entregas, acesso à conta, créditos, mudanças de estoque, e-mails e outros registros de clientes.

verifique seu app publicado

Veja o que qualquer pessoa consegue enxergar no seu app

Comece com uma verificação gratuita. O VibeCodeWall analisa a versão pública do app e continua acompanhando mudanças importantes ao longo do tempo.

verificar meu app grátis →