Documentação do next.config.mjs
Arquivo de configuração do Next.js para segurança, caching e cabeçalhos HTTP do frontend.
Caminho: front-end/next.config.mjs
Visão geral
- Define cabeçalhos de segurança para todas as rotas (
source: "/(.*)"). - Implementa Content Security Policy (CSP) compatível com OpenStreetMap e Vercel Analytics/Speed Insights.
- Ajusta políticas de script em ambiente de desenvolvimento para suportar ferramentas de build/debug.
- Configura caching agressivo para assets estáticos (
/_next/static,/images,/fonts,favicon). - Habilita formatos de imagem modernos (
AVIF,WebP) no Next Image.
Ambiente
isDev = process.env.NODE_ENV !== "production"- Dev: inclui
'unsafe-eval'emscript-src(necessário para bundlers/devtools). - Prod:
'unsafe-eval'é removido automaticamente.
Cabeçalhos configurados
-
X-Frame-Options: DENY
Bloqueia carregamento em iframes de terceiros (mitiga clickjacking). -
X-Content-Type-Options: nosniff
Impede MIME sniffing. -
Referrer-Policy: strict-origin-when-cross-origin
Evita vazamento de URLs completas em navegação cross-site. -
Permissions-Policy: geolocation=(self), camera=(), microphone=(self), fullscreen=(self), payment=(), usb=(), accelerometer=(), gyroscope=()
Restringe acesso a APIs sensíveis do navegador. -
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
Força HTTPS (habilitar apenas se o domínio já estiver 100% em HTTPS). -
Cross-Origin-Resource-Policy: same-origin
Bloqueia uso indevido de recursos por outros domínios. -
Cross-Origin-Opener-Policy: same-origin
Isola contexto de navegação contra ataques cross-origin.
Content Security Policy (CSP)
Diretivas aplicadas (valores separados por ;):
-
default-src 'self'
Origem padrão restrita. -
script-src 'self' 'unsafe-inline' - Dev: inclui
'unsafe-eval'. - Prod:
'unsafe-eval'removido. -
⚠
'unsafe-inline'é necessário para JSON-LD inline e scripts gerados pelo Next (revisar no futuro para nonce/hash). -
style-src 'self' 'unsafe-inline'
Necessário para Ant Design e estilos inline. -
img-src 'self' data: blob: https://*.tile.openstreetmap.org
Permite imagens locais, data/blob e tiles do OpenStreetMap. -
font-src 'self' data:
Fontes locais e embutidas via data URI. -
connect-src 'self' https://vitals.vercel-insights.com
Libera chamadas XHR/fetch para API própria e métricas da Vercel. -
frame-ancestors 'none'
Impede embelezamento por terceiros (complementaX-Frame-Options).
Como adicionar um novo domínio externo
- Identifique a categoria:
- Scripts →
script-src - Estilos →
style-src - Imagens →
img-src - Conexões (API/WebSocket) →
connect-src - Fontes →
font-src - Inclua o domínio na diretiva correta.
Ex.: CDN de imagens →img-src ... https://cdn.exemplo.com - Evite curingas (
*) e protocolos desnecessários.
Cache-Control por rota
-
/_next/static/*,/images/*,/fonts/*:
public, max-age=31536000, immutable(1 ano, seguro para assets versionados). -
/favicon.ico:
public, max-age=604800(1 semana).
Imagens (Next Image)
images.formats = ["image/avif", "image/webp"]
Navegadores que não suportam caem em fallback automático para JPEG/PNG.
Boas práticas
- Prod: sem
'unsafe-eval'. - Evitar
'unsafe-inline'emscript-src(migrar para nonce/hash futuramente). - Revisar CSP sempre que integrar novos provedores.
- Validar cache e cabeçalhos via DevTools ou
curl -I.
Troubleshooting
- Erro CSP no console: conferir diretiva rejeitada e adicionar domínio correto.
- Tiles OSM quebrados: validar
img-srcparahttps://*.tile.openstreetmap.org. - Cabeçalhos faltando: validar resposta via
curl -Iou DevTools > Network.
Checklist para Produção
- [ ] HTTPS habilitado e
Strict-Transport-Securityativo. - [ ]
unsafe-evalausente. - [ ]
unsafe-inlinerevisado (migrar para nonce/hash quando possível). - [ ] Todos os domínios externos adicionados ao CSP.
- [ ] Cache-Control validado (
curl -I). - [ ] Testes feitos em múltiplos navegadores.