Blind SQL Injection
Só leitura — não altera nada no alvo. Só em alvo seu ou autorizado por escrito.
O vetor
Vetor: SQLi onde o servidor não mostra erro nem dados; extrai-se por inferência (tempo/booleano). O que testamos: se um parâmetro é interpolado numa query sem parametrização.
Os passos
Passo 1 (🟢, comparar tempos) — em lab/endpoint autorizado:
curl -s -o /dev/null -w "verdadeiro: %{time_total}s\n" "$BASE/api/x?id=1%20AND%201=1"
curl -s -o /dev/null -w "sleep: %{time_total}s\n" "$BASE/api/x?id=1%20AND%20SLEEP(3)"
O que esperar
- VULNERÁVEL: a variante
SLEEP(3)demora ~3s a mais → a query executa injeção. - SEGURO: tempos iguais; input tratado como dado (query parametrizada).
Como corrigir
Correção (P0): queries parametrizadas / prepared statements sempre; ORM seguro; WAF SQLi como camada extra. (CATALOGO §2.4.) Limpeza: nenhuma (só leitura); no PostgREST/Supabase, RLS + sem SQL cru já mitiga.