Ir para o conteúdo

Bloquear e liberar e-mail e CPF

Lista nominal de bloqueio no checkout da useveggi.com.br. Serve para barrar uma pessoa específica já identificada — não confundir com o Validador de E-mail, que barra por regra (domínio descartável, erro de digitação, e-mail gerado por robô).

No ar desde 28/08/2026

Duas listas na KV, lidas pelo mesmo Worker do validador.

O jeito fácil: o executável

Na pasta C:\Projetos\vtex-analise, dê dois cliques em:

6 - BLOQUEAR ou LIBERAR email e CPF.bat

Ele abre um menu com seis opções e faz tudo sozinho — grava a lista e publica na Cloudflare. Não precisa saber nenhum comando.

Opção O que faz
1 Bloquear um e-mail
2 Bloquear um CPF
3 Liberar um e-mail
4 Liberar um CPF
5 Ver quem está bloqueado
0 Sair

Depois de bloquear ou liberar, ele publica na Cloudflare e mostra a lista que subiu, para você conferir. Já vale no checkout na hora, sem deploy.

Bloquear alguém

  1. Dois cliques no .bat
  2. Digite 1 (e-mail) ou 2 (CPF)
  3. Digite o valor
  4. Digite uma anotação — quem é e por quê

A anotação não é opcional na prática

No caso do CPF ela é a única forma de saber de quem é cada linha depois, porque o número não fica guardado em lugar nenhum. Escreva algo como Edimilson, card testing 27/08.

O CPF pode ser digitado com ou sem pontos — os dois viram a mesma coisa.

Liberar alguém

Opção 3 para e-mail, 4 para CPF.

No caso do CPF, o menu mostra a lista antes de perguntar. Aí você pode digitar:

  • o número do CPF, se você ainda tiver ele; ou
  • o código de 8 caracteres que aparece na lista, se você não tiver mais.

O segundo caminho existe para o erro mais provável: você bloqueia um CPF digitado errado e depois não faz ideia de qual número foi parar lá.


O que é guardado (e o que não é)

Lista Chave na KV Conteúdo
E-mails blocklist-emails O e-mail em texto
CPFs blocklist-cpfs Só o SHA-256 — nunca o número

O CPF não é gravado em lugar nenhum: nem no arquivo local, nem na Cloudflare. Fica o hash, os 3 últimos dígitos, a data e a sua anotação. Quando alguém digita um CPF no checkout, o Worker faz o mesmo hash e compara.

Consequência prática

Não dá para "ver a lista de CPFs bloqueados". Hash não volta atrás. Por isso existe a remoção pelo código de 8 caracteres, e por isso a anotação importa.

Os 3 últimos dígitos são rótulo, para você achar a linha — nunca critério de bloqueio. Três dígitos batem com 1 em cada 1.000 CPFs; bloquear por isso pegaria cliente honesto.


Até onde isso protege

Leia antes de confiar demais nesta lista

Ela encarece e registra. Não resolve sozinha.

  • Só pega quem passa pelo navegador. Bot que fala direto com a API da VTEX não executa o checkout e não é checado.
  • O CPF só é visto quando digitado. Cliente com cadastro tem o campo preenchido pelo perfil, e o orderForm devolve o documento mascarado (***50) — conferido no console em 28/08/2026. Na prática isso cobre o cadastro novo, que é justamente o caminho de quem inventa um e-mail por tentativa.
  • Trocar de e-mail ou de CPF custa segundos para quem está atacando.

O que a lista faz bem é tirar da jogada um atacante já identificado e deixar registro de quem foi bloqueado e quando.


Mensagem que o cliente vê

Não foi possível continuar com esses dados. Fale com a gente pelo WhatsApp que a gente resolve.

Neutra de propósito: não conta ao fraudador qual dado foi reconhecido, e dá uma saída para o caso de falso positivo em cliente real.


Pelo PowerShell, se preferir

O .bat é um atalho para estes comandos:

cd "C:\Projetos\vtex-analise\validador"

node bloquear.mjs email fulano@gmail.com "quem e / por que"
node bloquear.mjs cpf 123.456.789-00 "quem e / por que"
node bloquear.mjs lista
node bloquear.mjs remover email fulano@gmail.com
node bloquear.mjs remover cpf 123.456.789-00
node bloquear.mjs remover hash 7281dfb5

Depois, para publicar:

wrangler kv key put --binding=CACHE blocklist-emails --path blocklist-emails.json --remote
wrangler kv key put --binding=CACHE blocklist-cpfs --path blocklist-cpfs.json --remote

Sempre --path, nunca o JSON na linha de comando

O PowerShell 5.1 remove as aspas duplas ao repassar argumento para programa externo. O comando

wrangler kv key put --binding=CACHE blocklist-emails '["a@b.com"]' --remote

grava na KV o texto [a@b.com], sem aspas — JSON inválido. E não dá erro: o wrangler diz que gravou, e a lista simplesmente nunca casa com ninguém.

Aconteceu em 28/08/2026 e custou uma rodada inteira de depuração. Com --path, o texto nunca passa pelo shell.

Para conferir o que subiu — tem que sair com aspas em volta de cada item:

wrangler kv key get --binding=CACHE blocklist-emails --remote
wrangler kv key get --binding=CACHE blocklist-cpfs --remote

Arquivos

Arquivo Papel
validador/bloquear.mjs Adiciona, remove e lista. Gera os .json e imprime os comandos
validador/bloqueios.json Fonte da verdade local (e-mails + hashes + anotações)
validador/blocklist-emails.json Gerado — é o que o wrangler envia
validador/blocklist-cpfs.json Gerado — só hashes
trecho-cpf-checkout.js Lê o CPF digitado no checkout e consulta o Worker
6 - BLOQUEAR ou LIBERAR email e CPF.bat O menu

Os .json não vão para o GitHub

O .gitignore do vtex-analise é lista branca e não libera .json. É de propósito: o bloqueios.json tem e-mail de pessoa identificada e hashes de CPF. Se precisar restaurar, a fonte é a própria KV.

Endpoint usado

O Worker é o mesmo do validador de e-mail, no endereço:

https://veggi-validador-email.veggiageral.workers.dev
Endereço completo Método Corpo Resposta
https://veggi-validador-email.veggiageral.workers.dev/validar-cpf POST {"cpf": "12345678900"} {permitir, status, risco, motivos[], mensagem}
https://veggi-validador-email.veggiageral.workers.dev/validar POST {"email": "fulano@gmail.com"} {permitir, status, risco, motivos[], sugestao, mensagem}

O e-mail continua indo pela rota /validar de sempre — a checagem da blocklist entra logo depois da validação de sintaxe, antes de tudo o mais, porque é a mais barata e não depende de DNS.

Testar por fora, sem abrir a loja

Útil para separar "o Worker está errado" de "o checkout está errado". Cole no PowerShell:

curl.exe -s -X POST "https://veggi-validador-email.veggiageral.workers.dev/validar" -H "Content-Type: application/json" -d "{\"email\":\"fulano@gmail.com\"}"

curl.exe -s -X POST "https://veggi-validador-email.veggiageral.workers.dev/validar-cpf" -H "Content-Type: application/json" -d "{\"cpf\":\"12345678900\"}"

Quem está bloqueado responde "permitir":false. Quem não está responde "permitir":true.

curl.exe, com o .exe

No PowerShell, curl sozinho é apelido para outro comando (Invoke-WebRequest), que não entende -X nem -d. Escrever curl.exe chama o programa de verdade.

O endereço do Worker está no wrangler.jsonc, e é o mesmo escrito nos trechos do checkout — se um dia ele mudar, tem que mudar nos três lugares: trecho-para-checkout.js, trecho-cpf-checkout.js e aqui.