Proteção da própria wiki

· Padrão Frontend
Juan Kalleo
Juan Kalleo
Senior Fullstack
This page hasn't been translated to English yet — showing the original Portuguese content.

Toda página desta seção documenta, em detalhe real (código, threshold exato, nome de arquivo), o que protege — e o que ainda não protege — o HTD-Front e a API por trás dele. Isso é bom pra quem devia ler (o time), e ajuda quem não devia: os thresholds exatos do rack-attack, a confirmação de que autorização negada não gera log, o comportamento 403-vs-404 no acesso cross-tenant — nada disso é perigoso escondido numa wiki interna. A postura certa não é documentar menos — é ser claro sobre o que está exposto e por quê.

Este site é público, de propósito

O How to Dev chegou a rodar atrás de HTTP Basic Auth (todo o site, proxy.ts na raiz, credencial por variável de ambiente) — feito quando a ideia era "wiki fechada, só o time acessa". Essa proteção foi removida deliberadamente: o objetivo mudou pra portfólio pessoal, pensado pra aparecer em busca (ver SEO em README.md) — um site que ninguém encontra no Google não cumpre esse objetivo. robots.txt e os headers HTTP hoje permitem indexação (Allow: /, sem X-Robots-Tag: noindex), ao contrário de antes.

Isso é uma troca consciente, não um descuido: nada neste site depende de sigilo pra ser seguro. O conteúdo é documentação técnica escrita pra ser lida — inclusive por quem está avaliando o autor pra uma vaga, o que só funciona se o site for achável.

Por que um AuthGuard client-side não serviria aqui (se algum dia precisasse)

Fica registrado o motivo técnico, útil caso alguma seção volte a precisar de controle de acesso no futuro: o HTD-Front protege rota admin com AuthGuard (features/autenticacao/login/components/auth-guard.tsx) — mas AuthGuard é client-side de propósito ("use client", roda num useEffect, decide renderizar children ou redirecionar só depois de checar localStorage no navegador). Isso funciona lá porque o dado protegido de verdade (a resposta da API admin) só chega via useQuery/fetch disparado do client — a página em si não carrega dado sensível no HTML inicial. Ver Fetch x TanStack Query.

O How to Dev é o oposto: o conteúdo (o markdown inteiro da página) já está no HTML que o servidor manda na primeira resposta — não tem fetch condicional nenhum acontecendo depois. Um AuthGuard client-side aqui não protegeria nada: o navegador (ou um crawler, ou curl) já recebeu o conteúdo completo antes de qualquer JavaScript rodar pra "esconder" ele. Proteção real, pra esse tipo de conteúdo, precisaria ser server-side, antes da página renderizar — era exatamente o papel que o proxy.ts (removido) cumpria aqui.

Headers de segurança que continuam ativos

Remover a Basic Auth não significa abrir mão de higiene básica. next.config.ts ainda aplica, em toda rota: X-Frame-Options: DENY (anti-clickjacking), X-Content-Type-Options: nosniff (anti MIME sniffing) e Referrer-Policy: strict-origin-when-cross-origin — os mesmos headers estáticos de baixo custo que o HTD-Front já aplica (ver Cabeçalhos de segurança HTTP).