Case Study
Hardening de Portfólio Estático (Vercel)
Projeto para aplicar boas práticas de segurança em um site estático, reduzindo riscos comuns como clickjacking, MIME sniffing e exposição de dados via headers — com decisões documentadas e validação.
Objetivo
- Reduzir superfície de ataque do portfólio
- Aplicar Security Headers e CSP
- Forçar HTTPS com HSTS
- Documentar trade-offs e validação
Stack
Vercel • Security Headers • CSP • HSTS • Permissions-Policy
HardeningMedidas aplicadas
- X-Content-Type-Options: nosniff
- X-Frame-Options: DENY
- Referrer-Policy: strict-origin-when-cross-origin
- Permissions-Policy: camera=(), microphone=(), geolocation=()
- Strict-Transport-Security (HSTS): max-age=63072000; includeSubDomains; preload
- CSP: default-src 'self' + restrições de script/font/connect
Decisões e trade-offs
CSP com compatibilidade
Mantive 'unsafe-inline' em style-src para evitar quebra de estilos.
O objetivo futuro é remover essa exceção migrando totalmente para classes e evitando inline.
Sem scripts externos
Mantive script-src 'self' para bloquear scripts de terceiros e reduzir risco de supply chain.
Validação
- DevTools → Network → Response Headers (conferência dos headers)
- Console do navegador sem violações de CSP
- Testes manuais para confirmar navegação e recursos locais
Limitações e próximos passos
Limitações
- Site é estático (sem backend) — ameaças de servidor não se aplicam aqui
- Proteções dependem do suporte do navegador
Próximos passos
- Remover
'unsafe-inline'destyle-src - Adicionar relatórios de CSP (quando houver backend/endpoint)
- Registrar e monitorar erros JS (ex: Sentry) em ambiente real