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:
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¶
- Dois cliques no
.bat - Digite
1(e-mail) ou2(CPF) - Digite o valor
- 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
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:
| 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.