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
Blue Team • AppSec

Stack

Vercel • Security Headers • CSP • HSTS • Permissions-Policy

Hardening

Medidas 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.

Trade-off

Sem scripts externos

Mantive script-src 'self' para bloquear scripts de terceiros e reduzir risco de supply chain.

Redução de risco

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
Verificação

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' de style-src
  • Adicionar relatórios de CSP (quando houver backend/endpoint)
  • Registrar e monitorar erros JS (ex: Sentry) em ambiente real