Quinze links de análise confidencial circulando no WhatsApp, sem login e sem volta
Cada análise virava um link público colado numa conversa. Quem recebeu uma vez tem acesso para sempre, o link não é rastreável, não é cancelável — e ninguém conseguia responder quem abriu o quê.
- 31
- peças do acervo, contadas uma a uma — não estimadas
- 15
- links públicos sem controle de acesso, dos quais 9 com dado que não podia circular
- 0
- registros de acesso: era impossível responder quem abriu o plano de caixa
DIAGNÓSTICO OPERACIONAL
Como era antes
Toda análise que eu entregava nascia como uma página publicada na internet ou um arquivo solto no repositório. A distribuição era por link colado no WhatsApp.
Isso significa, na prática: sem login, sem perfil, sem revogação. Quem recebeu o link uma vez tem acesso para sempre. Link vazado não é rastreável nem cancelável. E colaboradores com acesso à ferramenta podiam alcançar peças que não deviam circular.
Contei o acervo em vez de estimar: 31 peças. Dessas, 15 estavam publicadas como link aberto, e 9 carregavam dado que não podia circular — plano de caixa, margem abaixo do cadastro, grade de alertas, pesquisa de preço. Outras quatro, pareceres contratuais, existiam só no repositório, visíveis a qualquer pessoa com uma cópia dele.
E o número que resume tudo: zero registros de acesso. A pergunta “quem abriu o plano de caixa?” não tinha resposta possível.
ENGENHARIA E ARQUITETURA
O que eu fiz
Um acervo atrás de login, com permissão por pessoa e por perfil, e trilha de quem abriu o quê.
A regra de ouro é a negação por padrão: peça nova nasce invisível até alguém liberar explicitamente. O contrário — nascer visível e ir restringindo — é como se constrói exatamente o vazamento que o projeto veio fechar.
E uma delimitação que evitou um projeto infinito: as peças são fotografias datadas, e são exibidas como tal. Transformar cada análise em painel vivo era a tentação óbvia, e teria trocado um problema resolvido por um projeto sem fim.
RESULTADOS MENSURÁVEIS
O que mudou
O acervo saiu do link público e passou a ter dono, prazo e registro. A pergunta “quem abriu isso?” passou a ter resposta.
O que não posso chamar de resolvido: migrar não fecha a exposição sozinho. Os links antigos continuam no ar até serem despublicados um a um, à mão. Enquanto esse passo não acontecer, o número que importa — quinze links abertos — não se move, e o projeto não entregou o que prometeu. Isso está escrito assim, com dono e prazo, e não como “fase final”.
DINÂMICA DE OPERAÇÃO
Uma coisa que eu descobri tarde, e você descobriria também
Eu quase recriei o problema dentro da solução.
Na plataforma onde o portal roda, todo arquivo na pasta pública é servido antes de o controle de acesso rodar. Um HTML colocado ali fica acessível sem login, mesmo com o portão de autenticação na frente do resto do sistema. Seria o mesmo vazamento, em outro endereço, com a falsa sensação de estar resolvido.
A correção é simples quando você sabe: o conteúdo protegido não mora em lugar que o servidor sirva sozinho — ele é lido de dentro da função que já checou quem é a pessoa. O que não é simples é descobrir isso antes, e não depois de alguém encontrar a porta.
A lição maior vale para qualquer sistema com login: teste a porta dos fundos antes de confiar na porta da frente. Autenticação que só existe no caminho que você imaginou não é autenticação.
O QUE EU APRENDI
Na Vercel, tudo que está na pasta public é servido antes do middleware rodar. Um HTML colocado ali fica acessível sem login mesmo com o portão de autenticação na frente do resto do app. Era exatamente o problema que o projeto existia para resolver, recriado em outro endereço — e eu só não repeti porque testei a porta dos fundos antes de confiar na porta da frente.
OUTROS PROJETOS DA MESMA DOR